为什么我不能在初始化列表
之后使用默认关键字class classA
{
int num;
public:
classA():num(3) = default;
};
答案 0 :(得分:4)
替代解决方案:
class classA
{
int num = 3;
public:
classA() = default;
};
答案 1 :(得分:2)
= default
提供了构造函数的定义。请注意,它不提供主体,它提供了定义。构造函数的定义包括mem-initialiser-list和body。因此,如果您需要自己的mem-initialiser-list,则必须自己提供整个定义。
另请注意,这样做没有问题。只需撰写{}
而不是= default
。使用= default
定义的默认构造函数执行与使用{}
定义的操作完全相同的操作。
这些之间的唯一区别是,在其声明中使用= default
定义的构造函数不被视为用户提供,因此允许该类是一个普通的类。但是,既然你想在构造函数中发生一些非平凡的事情,那么使用{}
就可以得到你想要的东西。