gpt4 book ai didi

c++ - 不直观的嵌套类继承

转载 作者:搜寻专家 更新时间:2023-10-31 01:52:28 25 4
gpt4 key购买 nike

以下代码是否符合 C++ 标准?奇怪的是 C::B 会工作,因为结构 B 在 A 的命名空间中。但它确实可以用 gcc 编译。

struct A { struct B {}; };
struct C : public A::B {};
struct D : public C::B {};

如果这是符合标准的 C++,那么这个结构的合理应用是什么?谢谢。

最佳答案

是的,它是有效的 C++。一个类在它自己的范围内(所以 BB::B 指的是同一个类 B),一个类的父类是在自己的范围内。因此,由于 BC 的范围内,而 B 在其自己的范围内,因此 C::B 引用BA::B

(旁注:不要将命名空间作用域混淆。)

C++03 §9 第 2 段说:

A class-name is inserted into the scope in which it is declared immediately after the class-name is seen. The class-name is also inserted into the scope of the class itself; this is known as the injected-class-name. For purposes of access checking, the injected-class-name is treated as if it were a public member name.

关于c++ - 不直观的嵌套类继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12628725/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com