C++ C+中命名空间后的类名+;

C++ C+中命名空间后的类名+;,c++,C++,新到C++ 有一个名称空间,即在它后面有两个类名 namespace abc { class Cursor; class BufferAllocator; .... .... } 上面的游标和缓冲分配器类声明在这里做什么 Cursor和BufferAllocator只是在它们的名称空间中被向前声明(因此它们可以在指针/引用上下文中使用)。这是向前声明。它告诉下面的代码“有一个名为Cursor的类。在定义它之前,您不需要知道其中包含什么[因为我们在代码中仅将其用作指针或引用]” 它只是表示“

新到C++

有一个名称空间,即在它后面有两个类名

namespace abc {
 class Cursor;
 class BufferAllocator;
....
....
}

上面的游标和缓冲分配器类声明在这里做什么

Cursor
BufferAllocator
只是在它们的名称空间中被向前声明(因此它们可以在指针/引用上下文中使用)。

这是向前声明。它告诉下面的代码“有一个名为Cursor的类。在定义它之前,您不需要知道其中包含什么[因为我们在代码中仅将其用作指针或引用]”

它只是表示“这些类存在于”名称空间
abc
中,而不提供关于它们的实现的任何信息

它被称为转发声明

它可用于:

  • 避免标头包含中的循环(当A类有B类成员,B类有A类成员时)
  • 减少类之间的依赖关系(因为可以有一个指向前向声明类的成员指针,但不能直接有一个成员,因为没有实现细节,编译器不知道类的大小,但知道指针的大小)。这一点在本书中特别使用

(这可能还有其他用途,但这些是我想到的最明显的用途)。

这是一个前瞻性声明。当您只打算使用指向该类型的指针或引用时,它可以用来通知编译器类型的存在。指针或引用的大小与它所引用的类型是不变的,因此在这种情况下,编译器不需要查看类型的整个定义;它只需要知道类型首先存在


在通常声明类型的头很大的情况下(考虑包含大量声明或模板实例化的头),这非常有用,在这种情况下,它可以减少编译时间(有时会显著减少)。您可以直接向前声明类型并跳过包含头的操作,这样编译器就不需要处理它。

命名空间在某种程度上很有帮助,它们可以避免在每个函数前面键入特定的类名

由于您是新手,您将主要看到使用名称空间std

所以现在您可以直接使用cout,如果您不使用这个语句,那么您必须为cout的每次使用编写std::cout


希望这有帮助

他们正在转发声明。它们允许您(例如)声明指向类的指针。声明这些类,它们还能做什么?此外,还可以按值在函数签名中使用。