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

use*_*001 3 c++

C++新手

有一个命名空间,就在它后面有几个类名

namespace abc {
 class Cursor;
 class BufferAllocator;
....
....
}
Run Code Online (Sandbox Code Playgroud)

上面的Cursor和BufferAllocator的类声明在这里做了什么?

JBL*_*JBL 9

它只是在命名空间中表示"这些类存在" abc,而不在其实现上提供任何信息.

它被称为前向声明.

它可用于:

  • 避免头部包含中的循环(当A类具有B类成员,B类具有A类成员时)
  • 减少类之间的依赖关系(因为你可以有一个指向前向声明类的成员指针,但不能直接拥有成员,因为编译器不知道没有实现细节的类的大小,但知道大小一个指针).这尤其用于Pimpl习语.

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


Mat*_*son 5

这是一个前瞻性声明.它告诉下面的代码"有一个名为Cursor的类.你不需要知道它里面有什么[因为我们只是在代码中使用它作为指针或引用,直到它已被定义]".