【发布时间】:2019-12-12 12:29:11
【问题描述】:
示例类B标头:
class A;
class B {
protected:
A* Foo;
};
VS
class B {
protected:
class A* Foo;
};
这两个类前向声明和/或首选哪一个有什么区别?
【问题讨论】:
示例类B标头:
class A;
class B {
protected:
A* Foo;
};
VS
class B {
protected:
class A* Foo;
};
这两个类前向声明和/或首选哪一个有什么区别?
【问题讨论】:
没有区别,但第一种方法更可取,因为它使代码更清晰。
【讨论】:
这是elaborate type specifier 的两个示例,它们实现了相同的效果。
正如 Vlad 在他的回答中提到的,第一个示例(cppreference 上的 (3))是转发声明类型的常用方法,并且可能比其他选项被更多的开发人员理解。
【讨论】:
这两者没有区别,但大多数人更喜欢第一个,因为它使A 的范围很明显。
请注意,这两者之间存在巨大差异:
class B {
class A* Foo;
};
class C {
class A;
A* Foo;
};
它在C 的范围内声明了一个类A,这与A 中的B 不同。
【讨论】: