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
我是新手,可能我说的不对。如有不妥请指正
我在看虚幻教程,遇到了这行代码:
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
我是新手,可能我说的不对。如有不妥请指正