当向前声明一个类的成员时,你可以做class Bar; Bar* m_bar
或者更短class Bar* m_bar
。但是名称解析的行为似乎有所不同。
例如,这可以完美编译:
struct Foo {
Foo();
struct Bar;
Bar* m_bar;
struct Bar {
int m_baz;
};
};
Foo::Foo(){
m_bar = new Foo::Bar;
}
虽然这不是,因为编译器认为的类型m_bar
不仅仅是:Foo::Bar
Bar
struct Foo {
Foo();
struct Bar* m_bar;
struct Bar {
int m_baz;
};
};
Foo::Foo(){
m_bar = new Foo::Bar;
}
我的问题更多是出于好奇而不是实际问题(我知道前向声明和嵌套类是 C++ 中的一个敏感主题),但为什么编译器将第二个版本解释为全局名称?