Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.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++;显式构造函数_C++_Constructor_Explicit - Fatal编程技术网

C++ C++;显式构造函数

C++ C++;显式构造函数,c++,constructor,explicit,C++,Constructor,Explicit,我有一个有两个构造函数的类 explicit MyClass(size_t num); template<class T> MyClass(T myObj); 将调用第一个构造函数 关于隐式构造函数和 MyClass obj = 30; 将调用第二个ctor 如何实现它?30是一个带符号的整数值,因此它不完全符合第一个构造函数的签名(因此,模板被实例化) 您可以将显式构造函数的签名更改为接受int,而不是Myclass obj(30)将调用显式构造函数,或者使用30u

我有一个有两个构造函数的类

   explicit MyClass(size_t num);
   template<class T> MyClass(T myObj);
将调用第一个构造函数

关于隐式构造函数和

MyClass obj = 30;
将调用第二个ctor


如何实现它?

30是一个带符号的整数值,因此它不完全符合第一个构造函数的签名(因此,模板被实例化)


您可以将显式构造函数的签名更改为接受
int
,而不是
Myclass obj(30)
将调用显式构造函数,或者使用
30u
调用它,以便匹配显式签名。

关于第一个对象

MyClass obj (30);
这是一个直接初始化,因此,如果参数具有正确的参数类型,则应调用构造函数。在这种情况下,参数是不正确的,因此为了更准确,在这种情况下,我将把size\u t更改为unsigned int,然后将30u传递给这个对象。在这种情况下,将调用第一个构造函数。 重新规划第二个对象

MyClass obj = 30;
这是通过复制进行的初始化,因此我将第二个构造函数更改为复制构造函数,如下所示:

template<class T> MyClass(const T& myObj);
模板MyClass(const T&myObj);

在我看来,在这种情况下,最好将数据成员更改为int。然而,应该调用第一个构造函数,然后根据需要调用第二个构造函数。

AFAIK这应该已经发生了。你试过了吗,但没有成功?是的,我试过了…它只在我喜欢(尺码)30的时候起作用。发生了什么?错误是什么?没有错误,但是当我调试时,我可以看到正在调用第二个ctor?有没有办法让它与短、长等一起工作?@TaruStolovich你是什么意思?是否有一个接受所有此类文本的显式构造函数?不能,您必须重载显式构造函数。@DimaRudnik您可以使用
std::enable\u if
std::is\u integral
template<class T> MyClass(const T& myObj);