c++ - 派生类中的静态方法可以调用 C++ 中的 protected 构造函数吗?

标签 c++ static constructor compiler-errors protected

此代码适用于 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/

相关文章:

java - 无法使用构造函数创建对象

c++ - C/C++ - 任何好的网络服务器库?

c++ - 如何在浏览器进程中调用CefV8Context::Eval()方法?

java - Java中调用静态目录复制方法

java - 如果静态方法不能被覆盖,为什么它们必须满足父静态方法的异常抛出契约?

C 编程使用静态函数将华氏温度转换为摄氏度误差

c++ - 有没有办法让构造函数接受两种可能的参数类型?

c# - 从 List<Class> 高效地创建 List<Class>?

c++ - 在 C++ 中将参数传递给 lambda

C++:为什么我不能使用初始值设定项 char foo[] 将字符串转换为 C 字符串?