派生类中的静态方法可以调用 C++ 中受保护的构造函数吗?

发布于 2024-12-02 10:16:34 字数 250 浏览 3 评论 0原文

这段代码适用于 clang 但 g++ 说:

错误:“A::A()”受保护

class A
{
protected:
    A() {}
};

class B : public A
{
    static A f() { return A(); } // GCC claims this is an error
};

哪个编译器是正确的?

This code works with clang but g++ says:

error: ‘A::A()’ is protected

class A
{
protected:
    A() {}
};

class B : public A
{
    static A f() { return A(); } // GCC claims this is an error
};

Which compiler is right?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

囚你心 2024-12-09 10:16:34

g++ 是对的。

C++ 标准 §11.5/1 规定“<...> 访问必须通过指向、引用或派生类本身的对象<...>” ”。对于构造函数,这意味着仅允许 B 调用 A 的受保护构造函数来构造其自己的基础子对象。

检查 g++ 中的相关问题。它被关闭,因为不是一个错误。

g++ is right.

The C++ Standard §11.5/1 says that "<...> the access must be through a pointer to, reference to, or object of the derived class itself <...>". In case of constructors, this means that B is allowed to call the protected constructor of A only in order to construct its own base subobject.

Check this related issue in g++. It was closed as not a bug.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文