在类内和类外的定义处执行类转发声明是否有区别

Is there a difference in doing class Forward Declaration at the definition inside the class and outside the class

本文关键字:转发 执行 声明 是否 有区别 定义      更新时间:2023-10-16

示例类B标头:

class A;
class B {
protected:
A* Foo;
};

class B {
protected:
class A* Foo;
};

两个类前向声明之间有什么区别和/或哪个是首选?

没有区别,但第一种方法更可取,因为它使代码更清晰。

这是精心设计的类型说明符的两个示例,它们实现了相同的目标。

正如 Vlad 在他的回答中提到的,第一个示例((3(关于 cpp首选项(是转发声明类型的常用方法,并且可能比其他选项有更多的开发人员理解。

这两者之间没有区别,但大多数人更喜欢第一个,因为它使A的范围显而易见。

请注意,这两者之间存在巨大差异:

class B {
class A* Foo;
};
class C {
class A;
A* Foo;
};

它声明了一个类AC的作用域内,这与B中的A不同。