C++ Primer(第 5 版)第 629 页指出:
A class that contains only inherited constructors will have a synthesized default constructor.
这条规则背后的原因是什么?
最佳答案
我认为这句话可能令人疑虑。例如,以下内容将不会编译:
struct Base{
Base(int){}
};
struct Derived : Base{
using Base::Base;
};
int main()
{
Derived d; // error: Derived has no public default ctor!!!
}
Derived
仅包含继承的构造函数,但它没有公共(public)默认构造函数!我说公开!实际上,gcc
的错误信息是:
'Derived::Derived()' is implicitly deleted because the default definition would be ill-formed
因此,作者的意思是,如果 Derived
类从 Base
类继承构造函数,则 Derived
的默认构造函数将是提供,因为它可能必须默认初始化 Derived
的数据成员,而这些数据成员无法从继承的构造函数中初始化,因为它们甚至不知道它们的存在。
最后,在我的示例中,Derived 的默认构造函数已被编译器隐式删除,因为没有人明确定义它。但是,如果您将默认构造函数添加到 Base,则 Derived 的合成默认构造函数将可用。
关于c++ - 为什么具有继承构造函数的类也会获得合成的默认构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31672134/