类名后的分号有啥作用? [复制]

Posted

技术标签:

【中文标题】类名后的分号有啥作用? [复制]【英文标题】:What does a semicolon after a class name do? [duplicate]类名后的分号有什么作用? [复制] 【发布时间】:2014-09-10 05:10:00 【问题描述】:

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

namespace sf

class RenderWindow;


class StateStack;
class Player;

class State

    // Code for the class
;

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

【问题讨论】:

也许这会有所帮助:***.com/questions/1410563/… 【参考方案1】:

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

【讨论】:

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

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

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

【讨论】:

这是必要的,因为编译器的简单性,没有查找,如果没有在翻译单元中声明它就不存在。

以上是关于类名后的分号有啥作用? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

请问函数的返回值类型那里,写“类名”和“类名&”有啥区别?

c#在定义一个类时,public static class 类名;public class 类名;class 类名,这3个有啥不同吗?

ClassName objectName(4); 有啥区别?和类名 objectName = 4;

有啥方法可以通过 selenium 获取元素的类名

CSS类被应用于没有该类名的元素,有啥想法吗?

在mfc中窗口名称和窗口类名有啥区别,在create的时候!