此代码适用于 clang,但 g++ 说:
error: ‘A::A()’ is protected
class A
{
protected:
A() {}
};
class B : public A
{
static A f() { return A(); } // GCC claims this is an error
};
哪个编译器是正确的?
最佳答案
g++ 是对的。
C++ 标准 §11.5/1 规定“<...> 访问必须通过指向、引用或 派生 类本身的对象的指针 <...>” .在构造函数的情况下,这意味着 B
只允许调用 A
的 protected 构造函数来构造它自己的基础子对象。
检查 this g++ 中的相关问题。它已被关闭,因为它不是错误。
关于c++ - 派生类中的静态方法可以调用 C++ 中的 protected 构造函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7248536/