C++ 什么是构造函数继承?

C++ 什么是构造函数继承?,c++,inheritance,constructor,c++11,C++,Inheritance,Constructor,C++11,在C++11中,继承构造函数意味着什么?如果它是我所认为的(基类构造函数被引入派生类的范围),那么它对我的代码有什么影响?这种特性的应用是什么?继承构造函数就是这个意思。派生类可以从其基类隐式继承构造函数 语法如下: struct B { B(int); // normal constructor 1 B(string); // normal constructor 2 }; struct D : B { using B::B; // inherit construct

在C++11中,继承构造函数意味着什么?如果它是我所认为的(基类构造函数被引入派生类的范围),那么它对我的代码有什么影响?这种特性的应用是什么?

继承构造函数就是这个意思。派生类可以从其基类隐式继承构造函数

语法如下:

struct B
{
    B(int); // normal constructor 1
    B(string); // normal constructor 2
};

struct D : B
{
    using B::B; // inherit constructors from B
};
D::D(int x) : B(x) {}
D::D(string s) : B(s) {}
现在D隐式定义了以下构造函数:

D::D(int); // inherited
D::D(string); // inherited
Ds成员默认由这些继承的构造函数构造

就好像构造器的定义如下:

struct B
{
    B(int); // normal constructor 1
    B(string); // normal constructor 2
};

struct D : B
{
    using B::B; // inherit constructors from B
};
D::D(int x) : B(x) {}
D::D(string s) : B(s) {}
这个功能没有什么特别之处。这只是一个省去打字样板代码的简写方法

以下是血淋淋的细节:

12.9继承构造函数 1) 命名构造函数的using声明隐式声明 一组继承构造函数。继承的候选集 using声明中命名的类X的构造函数由 由 默认参数的转换如下所示:

struct B
{
    B(int); // normal constructor 1
    B(string); // normal constructor 2
};

struct D : B
{
    using B::B; // inherit constructors from B
};
D::D(int x) : B(x) {}
D::D(string s) : B(s) {}
  • X的所有非模板构造函数,以及
  • 对于至少有一个参数带有默认参数的X的每个非模板构造函数 省略任何省略号参数说明和 从末尾依次省略带有默认参数的参数 参数类型列表的
  • X的所有构造函数模板,以及
  • 对于至少有一个带有默认参数的参数的X的每个构造函数模板,将生成一组构造函数模板 从省略任何省略号参数规范开始 从结尾处省略带有默认参数的参数 参数类型列表

此wiki:用简单的清晰语言恰当地回答了您的问题。@Als,我刚刚读过,但我仍然不明白继承构造函数将如何初始化派生类数据成员。@badmaash:请参见我的示例。Ds成员是默认构造的。@badmaash:用户声明取代隐式声明。显式定义的D(int)优先,B(int)不继承。问题:“复制构造函数”和“移动构造函数”是否继承?我的实验(clang3.3)不建议这样做,但我找不到文本来证实这一点。您能扩展示例以包括默认参数吗?