C++ 继承构造函数和默认构造函数

C++ 继承构造函数和默认构造函数,c++,inheritance,constructor,default-constructor,C++,Inheritance,Constructor,Default Constructor,我正在阅读有关的文档。有一个例子: 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

我正在阅读有关的文档。有一个例子:

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
};
结构B1{ B1(内部); }; 结构D1:B1{ 使用B1::B1; //继承的构造函数集是 //1.B1(常数B1和) //2.B1(B1和&) //3.B1(内部) //D1有以下施工人员: //1.D1() //2.D1(常数D1和) //3.首被告(首被告及被告)
//4.D1(int)再往下一点,它说它没有默认构造函数


D1 e;//错误:D1没有默认构造函数

请考虑以下代码:

struct B1                                                                                                                                                                                                
{
    B1(int){}
};

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


struct E
{
    E(){}
};


struct F
{
    F(int){}
};

如果你想写

E e;
它会建造得很好,但是

F f;
将失败。通过声明一个接受
int
的ctor,您已经有效地删除了默认ctor


你的问题代码遵循同样的原则。一旦你将
B1
的ctor拉入
D1
,你就有效地删除了它的默认ctor。

@POTEMKINDX你忘了在
main()中添加
d1d;
。如果你这样做了,你会发现它不起作用:@POTEMKINDX你没有调用导致@POTEMKINDX更新的构造函数。顺便说一句,你没有创建实例。@nikitablack他们说的是
D1()
存在于下一个代码块中的下一个代码块中
D1 e;//错误:D1没有默认构造函数
@KerrekSB问题是cppreference上的第一个示例说它在该示例中应该有默认值。因此页面上有矛盾的信息,但这并不能解释为什么
D1
h在这种情况下没有默认构造函数。是的,如果你看到这篇文章中的例子,我认为这可能会误导你,因为有另一个构造函数,那么D()就没有声明。