基类构造函数的使用声明

问题描述 投票:0回答:1

乍一看,

using
导入特定函数(例如
using std::cout
到作用域)。但这
using
将所有基类构造函数导入到派生类中。

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

    //...
};

What's actually behind the scenes of this `using` declaration?
c++ c++11 templates inheritance class-template
1个回答
6
投票

因为它是

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

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


这个

using
声明的背后到底是什么?

来自 cppreference.com

using
确实

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

同时继承

如果 using 声明引用直接基类的构造函数 正在定义的类(例如

using Base::Base;
),所有构造函数 该基地(忽略成员访问)对过载可见 初始化派生类时的解析.

© www.soinside.com 2019 - 2024. All rights reserved.