基类构造函数的使用声明

art*_*rtm 6 c++ oop inheritance class c++11

乍一看,using它用于导入特定的函数(例如using std::cout范围)。但这using实际上将基类的所有构造函数导入到派生类中。这份声明的背后究竟隐藏着什么using

template< typename T >
class Vec : public std::vector< T >
{
public:
    using std::vector<T>::vector;  // ?

    //...
};

Run Code Online (Sandbox Code Playgroud)

JeJ*_*eJo 5

由于它是public继承的,据说所有基类构造函数都应该已经可用(即为什么需要using)?

,默认情况下不会继承基类的构造函数。详细的解释可以在下面的讨论中找到:


这份声明的背后究竟隐藏着什么using

来自cppreference.comusing确实

  1. using 声明可用于将命名空间成员引入到其他命名空间和块作用域中,或者将基类 成员引入到派生类定义中。
  2. [...](特定...)

另外,在继承时:

如果 using 声明引用所定义的类的直接基类的构造函数(例如using Base::Base;),则在初始化派生类时,该基类的所有构造函数(忽略成员访问)对于重载决策都是可见的