类类型的详细说明的类型说明符

Elaborated Type specifiers for class type

本文关键字:类型 说明符 说明      更新时间:2023-10-16

这是关于的问题

在类中引入的类名不会被视为嵌套类名。

我很困惑为什么第1部分和第2部分在标准的§3.3.2【basic.scope.pdecl】/p7方面有所不同

两者都是详细说明的类型说明符,应该属于同一部分,但似乎有不同的范围

第1部分:

struct A 
{
    struct B;
    B* m_b;
};

第2部分:

struct A 
{
    struct B* m_b;
};

请指导我。

也许这个小例子有助于详细说明:

#include <iostream>
struct B {
    void call() { std::cout << "B" << std::endl; }
};
struct A {
    struct B* p;
};
struct A2 {
    struct B;
    struct B* p;
};
struct A2::B {
    void call() { std::cout << "A2::B" << std::endl; }
};
int main()
{
    B pb;
    A2::B pb2;
    auto a = A { &pb };
    a.p->call();
    auto a2 = A2 { &pb2 };
    a2.p->call();
    return 0;
}

预期结果:

B
A2::B

摘要:

A: :p是B*

A2::p是A2::B*

A2::B和B是完全不同的类