C++中结构的构造函数

Int*_*his 6 c++

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

鉴于:

class B {};

struct A {
   A( B b );
};
Run Code Online (Sandbox Code Playgroud)

test( A a, int* b=0);使用两个相应的变量调用函数voidB b, int i;

答案是 test( b, &i );

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

test( A(b), &i);
Run Code Online (Sandbox Code Playgroud)

das*_*ght 8

这是因为A有一个单参数构造函数,C++将其用作转换构造函数:

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

这就是C++可以解释test(b, &i)为的原因test(A(b), &i).

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