我有一个构造函数
T(someClass<double> o);
someClass
类由double* x
初始化。也就是
someClass<double>(double * X);
为什么下面的方法有效?
double * X=new X[10];
T obj(X);
为什么这行得通,即使 T
没有构造函数,它将 double *
作为参数(它应该得到 someClass 的实例
)?编译器是否从 double*
隐式初始化 someClass?
最佳答案
someClass<double>(double * X);
可以看作是converting constructor , 这可以转换 double*
至 someClass<double>
含蓄地。
对于 T obj(X);
,编译器将检查 T
的所有可能的构造函数 build obj
;并可能找到一种隐式转换 X
的可能方法至 someClass<double>
然后将其用作 T(someClass<double> o)
的参数.
您可以通过构造函数来禁止意外的隐式转换 explicit
.
关于c++ - 为什么构造函数使用错误的参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46519824/