C++ 为什么构造函数使用错误的参数?
我有一个构造函数C++ 为什么构造函数使用错误的参数?,c++,constructor,C++,Constructor,我有一个构造函数 T(someClass<double> o); 为什么下面的工作 double * X=new X[10]; T obj(X); 为什么这会起作用,即使T没有构造函数,它将double*作为参数(它应该得到someClass的一个实例)?编译器是否从double*隐式初始化someClass?someClass(double*X)可以被视为,它可以隐式地将double*转换为someClass 对于tobj(X),编译器将检查T的所有可能构造函数以构造obj;并
T(someClass<double> o);
为什么下面的工作
double * X=new X[10];
T obj(X);
为什么这会起作用,即使T
没有构造函数,它将double*
作为参数(它应该得到someClass
的一个实例)?编译器是否从double*
隐式初始化someClass?someClass(double*X)
可以被视为,它可以隐式地将double*
转换为someClass
对于tobj(X)
,编译器将检查T
的所有可能构造函数以构造obj
;并可能找到一种可能的方法,将X
隐式转换为someClass
,然后将其用作T(someClass o)
的参数
您可以通过使构造函数显式
someClass(double*X)来禁止意外的隐式转换
可以被视为,它可以隐式地将double*
转换为someClass
对于tobj(X)
,编译器将检查T
的所有可能构造函数以构造obj
;并可能找到一种可能的方法,将X
隐式转换为someClass
,然后将其用作T(someClass o)
的参数
通过使构造函数显式非常感谢,您可以禁止意外的隐式转换。这让我发疯,我在谷歌上找不到任何东西(因为我不知道转换构造函数这个词)。。。如果计时器允许,我将接受这个答案。如果您不希望构造函数用于隐式转换,请使用
explicit
声明它。非常感谢。这让我发疯,我在谷歌上找不到任何东西(因为我不知道转换构造函数这个词)。。。如果计时器允许,我将接受这个答案。如果您不希望构造函数用于隐式转换,请使用explicit
声明它。
double * X=new X[10];
T obj(X);