编译器支持最低版本要求:
- GCC: 4.8
- MSVC: 19.0
- Clang: 3.3
提案: N2540
C++11引入了一项新特性,称为“继承构造函数”(Inheriting Constructors),允许派生类继承基类的构造函数,从而可以简化派生类的构造函数实现。
当派生类没有自己的构造函数时,可以使用继承构造函数来继承基类的构造函数。例如,考虑下面这个示例:
class Base {
public:
Base(int x) : m_x(x) {}
private:
int m_x;
};
class Derived : public Base {
public:
using Base::Base;
};
这里,派生类Derived继承了基类Base的构造函数。在Derived的定义中,使用了using声明来继承基类的构造函数。这意味着,在使用Derived的构造函数时,可以像使用Base的构造函数一样,传递一个int类型的参数。
例如,我们可以这样创建一个Derived对象:
Derived d(42);
这里,调用的是Base的构造函数,传递了一个int类型的参数42。由于Derived没有自己的构造函数,因此编译器会自动合成一个默认构造函数。
需要注意的是,继承构造函数只能继承基类的构造函数,不能继承其它成员函数。并且,如果基类的构造函数有重载版本,需要使用using声明来显式指定继承哪一个版本的构造函数。
例如,如果Base有一个默认构造函数和一个带两个参数的构造函数:
class Base {
public:
Base() : m_x(0) {}
Base(int x) : m_x(x) {}
private:
int m_x;
};
那么,在Derived中,需要使用using声明来指定继承哪一个版本的构造函数。例如,我们可以这样来继承带一个int类型参数的构造函数:
class Derived : public Base {
public:
using Base::Base;
};
这样,Derived就继承了Base的带一个int类型参数的构造函数,而不是默认构造函数。