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

标签 c++ constructor

我有一个构造函数

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/

相关文章:

C++ 和 UTF8 - 为什么不直接替换 ASCII?

C++ 2a - 多态范围

c++ - 将 uint64_t 截断为 uint8_t[i] 时是否应该使用位掩码?

c++ - Visual Studio 2010 的单元测试功能是否可用于 native C++ 代码?

c++ - 将类指针传递给类的构造函数

c++ - 对函数的调用不明确

java - 将实例变量传递给 super 构造函数的解决方法是什么?

c++ - 首次使用对象后调用的全局对象构造函数

c++ - C++ 中的类构造函数

c++ - 没有要用构造函数调用的匹配函数(T* 数据)