记录了cppquiz的题目
Q1
1 |
|
输出为 1
.int
类型和const int
类型不匹配,第一个函数会生成void f(int &i)
,因此走的是第一个函数。
Q2
1 |
|
输出为 22
.
两个参数都为const char*
, 优先匹配第二个函数,因为这是非用户自定义转换。若是要选择const std::string&
,需要将char*
转为std::string
, 这是用户自定义类型转换。另外如果将第二个函数传入参数改为bool
,也是优先选择这个函数, 因为指针转bool也是非用户自定义转换。
Q3
1 |
|
编译错误 .double => int
和 double => unsigned
都属于浮点型-整型转换(floating-integral conversion),即都是一个级别的,没有其中一个比另一个好,因此程序是非法的,编译错误。
Q4
1 |
|
输出21
. 默认是double
.
Q5
1 |
|
输出 BA
.
初始化的顺序是由声明时的顺序决定,不是由初始化列表顺序决定。
Q6
1 |
|
输出 012012
.
没区别
Q7
1 |
|
输出A
. f()
非虚函数,无法实现重载,因此调用的是A::f()
.
Q8
1 |
|
输出A
.
虽然f()
是虚函数,但是传入函数 g()
时没有用引用或者指针,无法实现重载。
Q9
1 |
|
输出428
.
传的是引用,a先变成3然后又变成4.
Q11
1 |
|
输出0
.
a存储在静态区,因此既默认初始化为0. 如果为局部非静态变量则不一定。
Q12
1 |
|
输出0
.
同上
Q13
1 |
|
输出 acbBCA
.
构造时顺序是ACB,析构时C和B是按照构造时相反的顺序进行,最后在main函数返回时析构A.
- 本文作者: JiXiaw
- 本文链接: http://jixiaw.github.io/2021/02/05/cppquiz/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!