gpt4 book ai didi

c++ - 继承构造函数和默认构造函数

转载 作者:太空宇宙 更新时间:2023-11-04 14:30:45 24 4
gpt4 key购买 nike

我正在阅读有关 Inheriting constructors here 的文档.有一个例子:

struct B1 {
B1(int);
};
struct D1 : B1 {
using B1::B1;
// The set of inherited constructors is
// 1. B1(const B1&)
// 2. B1(B1&&)
// 3. B1(int)

// D1 has the following constructors:
// 1. D1()
// 2. D1(const D1&)
// 3. D1(D1&&)
// 4. D1(int) <- inherited
};

所以写的很清楚D1有如下构造函数:D1(),即默认构造函数。但是当我试图创建一个对象时:

D1 d;

我有一个错误use of deleted function 'D1::D1()'。是文档中的错误还是我误解了什么?

我用 c++14 尝试了 gcc。

最佳答案

考虑以下代码:

struct B1                                                                                                                                                                                                
{
B1(int){}
};

struct D1 : B1 {
using B1::B1;
};


struct E
{
E(){}
};


struct F
{
F(int){}
};

如果你试着写

E e;

它会很好地构建,但是

F f;

会失败。通过声明一个采用 int 的构造函数,您实际上已经删除了默认构造函数。

您的问题代码遵循相同的原则。一旦您将 B1 的构造函数引入 D1 - 您就有效地删除了它的默认构造函数。

关于c++ - 继承构造函数和默认构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34336397/

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