我有一个构造函数
T(someClass<double> o);
班级someClass
由double* x
初始化。那是
someClass<double>(double * X);
为什么以下工作?
double * X=new X[10];
T obj(X);
为什么这个工作,即使没有T
的构造函数,将double *
作为参数(它应该得到someClass
的实例)?编译器是否从double*
隐式初始化someClass?
答案 0 :(得分:5)
someClass<double>(double * X);
可以视为converting constructor,可以隐式地将double*
转换为someClass<double>
。
对于T obj(X);
,编译器将检查T
的所有可能构造函数以构造obj
;并且可能会找到隐含地将X
转换为someClass<double>
然后将其用作T(someClass<double> o)
的参数的可能方式。
您可以通过构造函数explicit
禁止意外的隐式转换。