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

时间:2016-08-18 13:50:33

标签: c++ initialization-list

为什么我不能在初始化列表

之后使用默认关键字
class classA
{
    int num;
public:
    classA():num(3) = default;
};

2 个答案:

答案 0 :(得分:4)

替代解决方案:

class classA
{
    int num = 3;

public:
    classA() = default;
};

答案 1 :(得分:2)

= default提供了构造函数的定义。请注意,它不提供主体,它提供了定义。构造函数的定义包括mem-initialiser-list和body。因此,如果您需要自己的mem-initialiser-list,则必须自己提供整个定义。

另请注意,这样做没有问题。只需撰写{}而不是= default。使用= default定义的默认构造函数执行与使用{}定义的操作完全相同的操作。

这些之间的唯一区别是,在其声明中使用= default定义的构造函数不被视为用户提供,因此允许该类是一个普通的类。但是,既然你想在构造函数中发生一些非平凡的事情,那么使用{}就可以得到你想要的东西。