考虑:
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
成员函数呢?
与其他成员不同,引入继承的构造函数的using- 声明的可访问性将被忽略。
(强调我的)
由using-declaration创建的同义词通常具有member-declaration的可访问性。一个使用说明符名称一个构造函数不创建一个同义词; 相反,如果其他构造函数在构造相应基类的对象时可以访问,则可以访问这些附加构造函数,并且using-declaration的可访问性将被忽略。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句