为什么不能将继承的受保护构造函数公开?

xmllmx:

考虑:

class A
{
protected:
    A(int) {}
    void f(int) {}

public:
    A() {}
};

class B : public A
{
public:
    using A::A;
    using A::f;
};

int main()
{
    B().f(1); // ok
    B(1); // error: 'A::A(int)' is protected within this context
}

为什么不能protected构造继承的构造函数public,而可以构造继承的protected成员函数呢?

songyuanyao :

与其他成员不同,引入继承的构造函数的using- 声明的可访问性将被忽略。

[namespace.udecl] / 19

(强调我的)

using-declaration创建的同义词通常具有member-declaration的可访问一个使用说明符名称一个构造函数不创建一个同义词; 相反,如果其他构造函数在构造相应基类的对象时可以访问,则可以访问这些附加构造函数,并且using-declaration的可访问性将被忽略

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么不能访问派生构造函数的成员初始化列表中的继承的受保护字段?

为什么不能用Java保护枚举构造函数或将其公开?

为什么我不能在包外使用受保护的构造函数?

受保护的继承-基类构造函数是受保护的还是继承类构造函数是受保护的?

为什么我不能将 Symbol 定义为构造函数?

为什么 Object 的构造函数是公共的而不是受保护的?

为什么在受保护的变量上使用构造函数?

为什么不能将一个类定义为受保护的?

为什么在使用受保护/私有继承的派生实例中不能访问基类的受保护成员?

为什么不能将构造函数参数(而非属性)直接用作成员函数的变量?

为什么我不能将ES6函数语法用作构造函数?

C ++:为什么不能在派生类中访问受保护的构造方法?

继承公共/受保护/私有构造函数

为什么不能将GregorianCalendar用作对象类型作为构造函数参数?

为什么在C ++中不能将构造函数声明为静态?

为什么不能将圆括号正确地视为构造函数调用?

为什么不能将圆括号正确地视为构造函数调用?

为什么不能将构造函数语法与“ unsigned int”类型一起使用?

为什么我不能将继承的错误用作SFINAE?

为什么受保护的构造函数可以用于包外的新实例?

为什么 Objective-C 不能在受保护的函数指针中使用“self”对象?

为什么不能从Java的另一个包中的继承类调用受保护的方法?

查询受保护的构造函数

为什么不能从子类访问受保护的方法?

为什么接口不能具有受保护的方法

为什么不能将`push`作为foreach函数传递?

为什么不能将函数的参数声明为val或var

为什么不能将此成员函数标记为const?

为什么我不能将 require 函数的参数用作变量