这段代码在clang上可以工作,但g++报错:
错误:‘A::A()’是受保护的
class A
{
protected:
A() {}
};
class B : public A
{
static A f() { return A(); } // GCC claims this is an error
};
哪个编译器是正确的?
这段代码在clang上可以工作,但g++报错:
错误:‘A::A()’是受保护的
class A
{
protected:
A() {}
};
class B : public A
{
static A f() { return A(); } // GCC claims this is an error
};
哪个编译器是正确的?
protected
提供了对B
内部的A
子对象的访问权限,而不是任何A
。另一个例子是struct C : A { static void break_invariants( B& b ) { b.protected_member_from_A = 5; } };
,这可能会破坏B
中保持的不变量。 - David Rodríguez - dribeas