【问题标题】:What does a semicolon after a class name do? [duplicate]类名后的分号有什么作用? [复制]
【发布时间】:2023-03-18 18:32:02
【问题描述】:

我注意到我正在阅读的书中有这样的代码行:

namespace sf
{
class RenderWindow;
}

class StateStack;
class Player;

class State
{
    // Code for the class
};

只有类、类名和分号的行是什么意思?

【问题讨论】:

标签: c++


【解决方案1】:

这些是前向声明。他们让以下代码知道有名称为RenderWindowStateStackPlayer 的类。当编译器看到这些名称被使用时,这会让编译器满意。稍后链接器会找到类的定义。

【讨论】:

  • 好的,那么使用这个有什么好处呢?似乎将文件包含在该类中会更容易?
  • @Connor 优势出现在 A 类使用 B 类而 B 类使用 A 类的情况下。这需要前向声明,因为如果您在 B.h 中使用 #include "A.h",反之亦然,您会得到无限循环以及同一类的重复定义。
  • 哦,有道理,谢谢你的帮助!
  • @Connor 它只是让编译器知道它的存在,而实际上没有完整的类。
  • "稍后的链接器" --> "稍后的编译器" .
【解决方案2】:

这是一个前向声明,本质上它向编译器发出信号,完整的定义将跟随在其他地方。

这种情况的主要用例是您不需要完整定义的情况,例如,如果您有一个 T 类型的指针,则在实例化之前您不需要 T 的完整定义,因此它不需要需要声明T*

【讨论】:

  • 这是必要的,因为编译器的简单性,没有查找,如果没有在翻译单元中声明它就不存在。
猜你喜欢
  • 1970-01-01
  • 2014-02-22
  • 1970-01-01
  • 2010-11-19
  • 1970-01-01
  • 2014-10-13
  • 2022-01-06
  • 1970-01-01
  • 2011-06-01
相关资源
最近更新 更多