第一眼,using
用于导入特定的函数(例如using std::cout
到范围)。但是这个using
实际上将基类的所有构造函数导入到派生类中。这背后到底是什么using
宣言?
template< typename T >
class Vec : public std::vector< T >
{
public:
using std::vector<T>::vector; // ?
//...
};
As it's public
继承的,据说是所有基类构造函数
应该已经可用(即为什么需要using
)?
No,默认情况下不继承基类的构造函数。详细的解释可以在下面的讨论中找到:
- 为什么构造函数不是
遗传?
- 为什么 C++ 没有构造函数
遗传?
这背后到底是什么using
宣言?
From cppreference.com, using
does
- using-声明可用于将命名空间成员引入
其他命名空间和块作用域,或者引入基类
成员到派生类定义中。
- [...] (c++20具体的...)
还同时遗产:
如果 using 声明引用直接基类的构造函数
正在定义的类(例如using Base::Base;
), 所有构造函数
那个基地的(忽略会员访问)使过载可见
初始化派生类时的解析.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)