首页 > 解决方案 > 基类构造函数的使用声明

问题描述

乍一看,using是用来导入一个特定的函数(比如using std::cout到作用域)。但这using实际上将基类的所有构造函数都导入了派生类。using这个宣言的背后究竟是什么?

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

    //...
};

标签: c++classoopc++11inheritance

解决方案


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

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


using这个宣言的背后究竟是什么?

cppreference.comusing确实

  1. Using-declarations 可用于将命名空间成员引入其他命名空间和块作用域,或将基类 成员引入派生类定义。
  2. [...](特定...)

同时继承

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


推荐阅读