类名后的分号有啥作用? [复制]
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】:这些是前向声明。他们让以下代码知道有名称为RenderWindow
、StateStack
和Player
的类。当编译器看到这些名称被使用时,这会让编译器满意。稍后链接器会找到类的定义。
【讨论】:
好的,那么使用这个有什么好处呢?似乎将文件包含在该类中会更容易? @Connor 优势出现在 A 类使用 B 类而 B 类使用 A 类的情况下。这需要前向声明,因为如果您在B.h
中使用 #include "A.h"
,反之亦然,您会得到无限循环以及同一类的重复定义。
哦,有道理,谢谢你的帮助!
@Connor 它只是让编译器知道它的存在,而实际上没有完整的类。
"稍后的链接器" --> "稍后的编译器" .【参考方案2】:
这是一个前向声明,本质上它向编译器发出信号,完整的定义将跟随在其他地方。
这种情况的主要用例是您不需要完整定义的情况,例如,如果您有一个 T
类型的指针,则在实例化之前您不需要 T
的完整定义,因此它不需要需要声明T*
。
【讨论】:
这是必要的,因为编译器的简单性,没有查找,如果没有在翻译单元中声明它就不存在。以上是关于类名后的分号有啥作用? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
c#在定义一个类时,public static class 类名;public class 类名;class 类名,这3个有啥不同吗?