为什么构造函数使用错误的参数?

Lea*_*rer 1 c++ constructor

我有一个构造函数

T(someClass<double> o);
Run Code Online (Sandbox Code Playgroud)

该类someClass初始化为double* x.那是

someClass<double>(double * X);
Run Code Online (Sandbox Code Playgroud)

为什么以下工作?

double * X=new X[10];
T obj(X);
Run Code Online (Sandbox Code Playgroud)

为什么这个工作,即使没有构造函数T,double *作为参数(它应该得到一个实例someClass)?编译器是否隐式初始化someClass double*

son*_*yao 5

someClass<double>(double * X);可以看作转换构造,它可以转换double*someClass<double>隐.

因为T obj(X);,编译器将检查T要构造的所有可能的构造函数obj; 并且可能会找到隐式转换XsomeClass<double>然后将其用作参数的可能方式T(someClass<double> o).

您可以通过创建构造函数来禁止意外的隐式转换explicit.

  • 如果您不希望将构造函数用于隐式转换,请使用`explicit`声明它. (3认同)