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快捷键)。如果它在类中与问题中一样,是否有任何区别?它是对内部类的前向声明还是对同一命名空间中的类的前向声明?如果它与问题中的类相同,那么有什么区别吗?它是对内部类的前向声明还是对同一命名空间中的类的前向声明?