使用带有默认关键字的初始化列表

Usage of Initilizer list with default keyword

本文关键字:初始化 列表 关键字 默认      更新时间:2023-10-16

为什么初始化列表后不能使用default关键字

class classA
{
    int num;
public:
    classA():num(3) = default;
};

备选方案:

class classA
{
    int num = 3;
public:
    classA() = default;
};

= default提供了构造函数的定义。注意,它没有提供主体,它提供了一个定义。构造函数的定义既包括初始化列表,也包括函数体。因此,如果你想要自己的mem- initializer -list,你必须自己提供整个定义。

还要注意,这样做没有任何问题。把= default写成{}。使用= default定义的默认构造函数执行与使用{}定义的构造函数完全相同的操作。

它们之间的唯一区别是,在声明时使用= default定义的构造函数不被认为是用户提供的,因此允许类成为普通类。但是,由于您希望在构造函数中发生一些重要的事情,因此使用{}可以得到您想要的结果。