Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/141.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么构造函数使用错误的参数?_C++_Constructor - Fatal编程技术网

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);