4

我有一个有 2 个构造函数的类。

   explicit MyClass(size_t num);
   template<class T> MyClass(T myObj);

每当我制作时我都想要

MyClass obj( 30 );

将调用第一个构造函数,

在隐式构造函数和

MyClass obj = 30;

第二个ctor将被调用。

我怎样才能让它发生?

4

2 回答 2

7

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

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

于 2012-12-17T10:17:21.947 回答
0

关于第一个对象

MyClass obj (30);

这是直接初始化,因此如果参数具有正确的参数类型,则应调用构造函数。在这种情况下,参数不正确,所以为了在这种情况下更准确,我会将 size_t 更改为 unsigned int,然后将 30u 传递给该对象。在这种情况下,将调用第一个构造函数。关于第二个对象

MyClass obj = 30;

这是复制初始化,因此我会将第二个构造函数更改为复制构造函数,如下所示:

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

在我看来,在这种情况下,将您的数据成员更改为整数会更好。尽管如此,应该调用第一个构造函数,然后根据需要调用第二个构造函数。

于 2019-03-02T20:44:37.807 回答