考虑以下类:
class Foo {
int a, b;
public:
Foo() : a{1}, b{2} {} // Default ctor with member initializer list
//Foo() : a{1}, b{2} = default; // Does not work but why?
};
(编辑:因为它在几个答案中被提到 - 我知道课堂成员初始化器,但这不是重点)
我认为第二个 ctor 定义会更优雅,更适合现代 C++ 代码(另请参阅如果必须明确使用默认语义,为什么应该使用=default
)。但是,似乎没有常见的编译器接受它。而 cppreference 对此保持沉默。
我的第一个想法是成员初始化器列表以某种方式改变了链接的常见问题解答中解释的“默认语义”,因为它可能会或可能不会默认构造成员。但是对于类内初始化器,我们会遇到同样的问题,只是这里Foo() = default;
工作得很好。
那么,为什么不允许呢?