首页 > 解决方案 > 继承构造函数的 C++ 可见性

问题描述

当我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++classinheritanceconstructorusing-declaration

解决方案


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

19 由using-declaration创建的同义词具有member-declaration的通常可访问性。命名构造函数的using-declarator不会创建同义词;相反,如果附加构造函数在用于构造相应基类的对象时可访问,则它们是可访问的,并且using-declaration的可访问性被忽略


推荐阅读