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

时间:2017-10-02 05:12:15

标签: c++ constructor

我有一个构造函数

T(someClass<double> o);

班级someClassdouble* x初始化。那是

someClass<double>(double * X);

为什么以下工作?

double * X=new X[10];
T obj(X);

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

1 个答案:

答案 0 :(得分:5)

someClass<double>(double * X);可以视为converting constructor,可以隐式地将double*转换为someClass<double>

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

您可以通过构造函数explicit禁止意外的隐式转换。