【问题标题】:C++ visibility of inherited constructor [duplicate]继承构造函数的 C++ 可见性 [重复]
【发布时间】:2020-01-01 20:06:39
【问题描述】:

当我像这样使用using时,为什么构造函数是公开继承的?

class Base {
int x;
public:
    Base(int x);
};

class Derived : public Base {
    using Base::Base;
};

我现在可以做:

Derived d (2);

我认为using 声明具有它们所在位置的可见性。在这里,它应该是私有的。

来自C++ 编程语言

一个名字带入派生 using-declaration 的类作用域的访问权限由 using-declaration 的位置决定;

【问题讨论】:

    标签: c++ class inheritance constructor using-declaration


    【解决方案1】:

    根据 C++17 标准(10.3.3 using 声明)

    19 由 using-declaration 创建的同义词通常具有 成员声明的可访问性。 一个 using-declarator 命名一个 构造函数不创建同义词;相反, 如果构造函数在使用时可访问,则它们是可访问的 构造对应基类的对象, using-declaration 的可访问性被忽略

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-21
      • 2014-04-14
      • 1970-01-01
      • 2015-03-24
      • 2017-12-05
      • 1970-01-01
      • 2011-05-31
      • 2019-01-12
      相关资源
      最近更新 更多