gpt4 book ai didi

c++ - 为什么具有继承构造函数的类也会获得合成的默认构造函数?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:23:49 26 4
gpt4 key购买 nike

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com