基类构造函数的使用声明

时间:2019-07-19 04:07:39

标签: c++ class oop c++11 inheritance

乍一看,using用于导入特定功能(例如using std::cout到作用域)。但是,这个using实际上将所有基类的构造函数导入派生类。此using声明的幕后实际上是什么?

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

    //...
};

1 个答案:

答案 0 :(得分:3)

  

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

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


  

using声明的幕后实际上是什么?

cppreference.com 中,using确实

  
      
  1. 使用声明可用于将名称空间成员引入   其他名称空间和块作用域,或引入基类   成员属于派生的类定义。
  2.   
  3. [...](特定于 ...)
  4.   

也在inheritance期间:

  

如果using-declaration引用的是直接基的构造函数   正在定义的类(例如using Base::Base;),所有构造函数   (忽略成员访问权限)可见   初始化派生类时的分辨率