C++显式构造函数

C++ Explicit Constructor

本文关键字:构造函数 C++      更新时间:2023-10-16

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

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

每当我制作时,我都想要它

MyClass obj( 30 );

第一个构造函数将被调用,

在隐式构造函数和

MyClass obj = 30;

将调用第二个 ctor。

我怎样才能实现它?

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

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

关于第一个对象

MyClass obj (30);

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

MyClass obj = 30;

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

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

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