【问题标题】:Using-declaration for base class constructors基类构造函数的使用声明
【发布时间】:2019-11-28 00:45:48
【问题描述】:

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

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

    //...
};

【问题讨论】:

  • “背后”没有任何东西。这就是它的作用。
  • 当您问幕后的实际情况时,您是想找出标准为何如此定义它,还是想找出它的用处?
  • 也许它看起来与我使用和理解的有点不同。它导入所有构造函数(而不是特定函数)。此外,由于它是公共继承的,因此应该已经可以使用所有基类构造函数(即为什么需要using)。谢谢

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


【解决方案1】:

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

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


using 声明的背后究竟是什么?

来自cppreference.comusing 确实

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

同时inheritance:

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

【讨论】:

    猜你喜欢
    • 2019-08-17
    • 2016-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-05
    • 2018-10-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多