c++ - 基类构造函数的使用声明
问题描述
乍一看,using
是用来导入一个特定的函数(比如using std::cout
到作用域)。但这using
实际上将基类的所有构造函数都导入了派生类。using
这个宣言的背后究竟是什么?
template< typename T >
class Vec : public std::vector< T >
{
public:
using std::vector<T>::vector; // ?
//...
};
解决方案
因为它是
public
继承的,所以应该所有的基类构造函数都应该已经可用(即为什么需要using
)?
不,默认情况下不会继承基类的构造函数。详细解释可以在以下讨论中找到:
using
这个宣言的背后究竟是什么?
从cppreference.com,using
确实
- Using-declarations 可用于将命名空间成员引入其他命名空间和块作用域,或将基类 成员引入派生类定义。
- [...](c ++ 20特定...)
同时继承:
如果 using 声明引用了正在定义的类的直接基类的构造函数(例如
using Base::Base;
),则在初始化派生类时,该基类的所有构造函数(忽略成员访问)对重载决议可见。
推荐阅读
- javascript - VueJS 中的多行字符串
- javascript - 如何有条件地加载 HTML 元素,或者在加载页面之前删除它们?
- spring - Spring:从具有关系的表中删除数据
- javascript - React:映射数据
- python - 如果字典中的列表中存在值,则返回键
- python - Django 在 UpdateView 类中设置 ModelForm ModelChoiceField 初始值
- android - 如何从回收站视图中获取项目?
- node.js - Stripe Connect - 如何以最安全的方式使用令牌来传递敏感数据?
- python - 有没有一种“热交换”列表的pythonic方法?
- css - CSS自定义样式复选框:使复选标记出现并(删除焦点样式)