C++ "class Name*" 是一个 class 指针吗?

C++ Is "class Name*" a class pointer?

我在看虚幻教程,遇到了这行代码:

class UStaticMeshComponent*  Pickup;

这是一个前向声明。 学习c++有一段时间了,没遇到过这种情况。我知道指针和引用,但我从未见过这种格式:class Name*。我们是否正在创建指向另一个 class 的 class 指针?我尝试搜索后跟 * 的 class 名称,但出现的唯一结果是关于数据类型和指针的。

public:
    APickUp ();

    virtual void BeginPlay () override;

    virtual void tick ( float DeltaSeconds );

private:
    class UStaticMeshComponent* Pickup;
class UStaticMeshComponent*  Pickup;

这声明了类型 class UStaticMeshComponent 并且还声明了指向 UStaticMeshComponent 类型指针的变量 Pickup。所以上面的代码或多或少等同于:

class UStaticMeshComponent;
UStaticMeshComponent*  Pickup;

因为此时您没有 UStaticMeshComponent 的定义(只有声明),所以 UStaticMeshComponent 被认为是不完整的类型。对于不完整的类型,您可以做一些事情。其中之一是声明指向它们的指针。

当你只使用一个指向类型的指针时,类型不需要是完整的,所以即使 UStaticMeshComponent 没有被定义也能正常工作。这意味着当此 header 包含在您的一个 cpp 文件中时,它的编译速度应该比如果 Pickup.h 包含定义了 UStaticMeshComponent 的 header 快一点。

这种加速可能很大,具体取决于 header 的大小,以及在编译过程中避免包含的次数。

这里最大的困惑是:

class UStaticMeshComponent*  Pickup;

class UStaticMeshComponent  *Pickup;

甚至这个:

class UStaticMeshComponent  *  Pickup;

,如示例 http://www.cplusplus.com/doc/tutorial/classes/#pointers_to_classes .

不同之处在于 - 不好的做法。所有人都应该意味着同样的事情,但只有第二个例子是正确的,但他们都有效。


至少根据这个: https://users.ece.cmu.edu/~eno/coding/CppCodingStandard.html

place the * close to variable name not pointer type

我是新手,可能我说的不对。如有不妥请指正