记录了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 许可协议。转载请注明出处!