乍一看,using
用于导入特定功能(例如using std::cout
到作用域)。但是,这个using
实际上将所有基类的构造函数导入派生类。此using
声明的幕后实际上是什么?
template< typename T >
class Vec : public std::vector< T >
{
public:
using std::vector<T>::vector; // ?
//...
};
答案 0 :(得分:3)
由于它是
public
的继承者,因此应该是所有基类构造函数 应该已经可用(即为什么需要using
)?
否,默认情况下不继承基类的构造函数。可以在以下讨论中找到详细的解释:
此
using
声明的幕后实际上是什么?
在 cppreference.com 中,using
确实
- 使用声明可用于将名称空间成员引入 其他名称空间和块作用域,或引入基类 成员属于派生的类定义。
- [...](特定于c++20 ...)
也在inheritance期间:
如果using-declaration引用的是直接基的构造函数 正在定义的类(例如
using Base::Base;
),所有构造函数 (忽略成员访问权限)可见 初始化派生类时的分辨率。