C ++中结构的构造函数

时间:2016-10-05 03:15:02

标签: c++

我在学习C ++时遇到了以下练习题和答案,我不明白。

  

假设:

class B {};

struct A {
   A( B b );
};
     

使用两个对应的变量test( A a, int* b=0);

调用函数void B b, int i;      

答案是test( b, &i );

我的问题是,如何传递构造函数的必要参数而不是实际调用它?在我看来,答案应该是:

test( A(b), &i);

1 个答案:

答案 0 :(得分:8)

这是有效的,因为A有一个单参数构造函数,C ++用作converting constructor

  

未使用说明符explicit声明并且可以使用单个参数调用的构造函数(直到C ++ 11)称为转换构造函数。与仅在直接初始化期间考虑的显式构造函数(包括诸如static_cast之类的显式转换)不同,在复制初始化期间也会考虑转换构造函数,作为用户定义的转换序列的一部分。

这就是为什么C ++可以将test(b, &i)解释为test(A(b), &i)

如果您不想要此行为,请标记A的构造函数explicit