C++ 类名后面的分号是做什么的?
在我正在阅读的书中,我注意到这样的代码行:C++ 类名后面的分号是做什么的?,c++,C++,在我正在阅读的书中,我注意到这样的代码行: namespace sf { class RenderWindow; } class StateStack; class Player; class State { // Code for the class }; 只有类、类名和分号的行是什么意思?这些是正向声明。它们让下面的代码知道有名称为RenderWindow、StateStack和Player的类。当编译器看到使用了这些名称时,它会感到满意。稍后,链接器将找到类的定义。它是一个转
namespace sf
{
class RenderWindow;
}
class StateStack;
class Player;
class State
{
// Code for the class
};
只有类、类名和分号的行是什么意思?这些是正向声明。它们让下面的代码知道有名称为
RenderWindow
、StateStack
和Player
的类。当编译器看到使用了这些名称时,它会感到满意。稍后,链接器将找到类的定义。它是一个转发声明,本质上它向编译器发出信号,表示完整的定义将跟随在其他地方
这方面的主要用例是不需要完整定义的情况,例如,如果您有一个
T
类型的指针,则在实例化之前不需要T
的完整定义,因此不需要声明T*
,这可能会有所帮助:Ok,那么使用这个有什么好处呢?似乎只将文件包含在该类中更容易?@Connor在类A使用类B而类B使用类A的情况下,优势就出现了。这需要一个转发声明,因为如果在中包含“A.h”
,反之亦然,对于同一个类,您会得到一个无限循环以及重复的定义。哦,好的,这很有意义,谢谢您的帮助@Connor它只是让编译器知道它存在,而实际上没有完整的类。“稍后链接器”->“稍后编译器”。这是必要的,因为编译器过于简单,没有查找,如果它没有在翻译单元中声明,它就不存在。