继承构造函数的 C++ 可见性

4 c++ inheritance constructor class using-declaration

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

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

class Derived : public Base {
    using Base::Base;
};
Run Code Online (Sandbox Code Playgroud)

我现在可以这样做:

Derived d (2);
Run Code Online (Sandbox Code Playgroud)

我认为using声明可以看到它们所在的位置。在这里,它应该是私有的。

来自C++ 编程语言

通过 using 声明带入派生类作用域的名称的访问权限由 using 声明的位置决定;

Vla*_*cow 6

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

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