Class C++;是";类名*”;类指针?

Class C++;是";类名*”;类指针?,class,c++11,pointers,unreal-engine4,Class,C++11,Pointers,Unreal Engine4,我在看一个不真实的教程,遇到了以下代码行: class UStaticMeshComponent* Pickup; 这是一份声明。 我学习C++已经有一段时间了,以前没有遇到过这样的事情。我知道指针和引用,但我从未见过这种格式:类名*。我们正在创建指向另一个类的类指针吗?我尝试搜索后跟*的类名,但出现的唯一结果是关于数据类型和指针的 public: APickUp (); virtual void BeginPlay () override; virtual vo

我在看一个不真实的教程,遇到了以下代码行:

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

public:
    APickUp ();

    virtual void BeginPlay () override;

    virtual void tick ( float DeltaSeconds );

private:
    class UStaticMeshComponent* Pickup;
这声明了类型
类UStaticMeshComponent
,还声明了指向
UStaticMeshComponent
的类型指针的变量
Pickup
。因此,上述代码或多或少等同于:

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

这声明了类型
类UStaticMeshComponent
,还声明了指向
UStaticMeshComponent
的类型指针的变量
Pickup
。因此,上述代码或多或少等同于:

class UStaticMeshComponent;
UStaticMeshComponent*  Pickup;

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

当您仅使用指向类型的指针时,类型不需要完整,因此即使未定义
UStaticMeshComponent
,也可以正常工作。这意味着,当此头包含在某个cpp文件中时,它的编译速度应该比
Pickup.h
包含定义了
UStaticMeshComponent
的头快一点


此速度可能会显著提高,具体取决于标题的大小,以及编译过程中避免包含的次数。

当您仅使用指向类型的指针时,类型不需要完整,因此即使未定义
UStaticMeshComponent
,也可以正常工作。这意味着,当此头包含在某个cpp文件中时,它的编译速度应该比
Pickup.h
包含定义了
UStaticMeshComponent
的头快一点


速度的提高可能很大,具体取决于标题的大小,以及编译过程中避免包含的次数。

这里最大的困惑在于:

class UStaticMeshComponent*  Pickup;

即使这样:

class UStaticMeshComponent  *  Pickup;
,如示例中所示

不同之处在于——糟糕的做法。所有这些都应该意味着同一件事,但只有第二个例子是正确的,但它们都有效


至少根据这一点:

将*放在变量名而不是指针类型附近


我是个新手,我可能错了。如果我错了,请纠正我。

这里最大的困惑是:

class UStaticMeshComponent*  Pickup;

即使这样:

class UStaticMeshComponent  *  Pickup;
,如示例中所示

不同之处在于——糟糕的做法。所有这些都应该意味着同一件事,但只有第二个例子是正确的,但它们都有效


至少根据这一点:

将*放在变量名而不是指针类型附近


我是个新手,我可能错了。如果我错了,请纠正我。

请不要发布代码截图。使用文本(与图像一样)并将其格式化为代码(ctrl-k快捷键)。请不要发布代码截图。使用文本(与图像一样)并将其格式化为代码(ctrl-k快捷键)。如果它在类中与问题中一样,是否有任何区别?它是对内部类的前向声明还是对同一命名空间中的类的前向声明?如果它与问题中的类相同,那么有什么区别吗?它是对内部类的前向声明还是对同一命名空间中的类的前向声明?