使用带有 default 关键字的 Initializer 列表

Usage of Initilizer list with default keyword

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

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

备选方案:

class classA
{
    int num = 3;

public:
    classA() = default;
};

= default 提供构造函数的定义。请注意,它不提供 body, 它提供 定义。 构造函数的定义包括 mem-initialiser-list 和 body。所以如果你想要自己的mem-initialiser-list,你必须自己提供完整的定义。

另请注意,这样做是零问题。只需写 {} 而不是 = default。用 = default 定义的默认构造函数执行与用 {}.

定义的完全相同的操作

它们之间的唯一区别是,在其声明中使用 = default 定义的构造函数不被视为 user-provided,因此允许 class 是一个微不足道的 class.但是由于您希望在构造函数中发生某些事情 non-trivial ,因此您可以通过使用 {}.

得到您想要的东西