2016-11-25 54 views
0

我在看一個虛幻的教程和遇到這行代碼:C++是「類名*」類指針嗎?

class UStaticMeshComponent* Pickup; 

這是一個向前聲明。 我一直在研究C++一段時間,並沒有遇到過這樣的事情。我知道指針和引用,但我從來沒有見過這種格式:class Name *。我們是否創建了一個指向另一個類的類指針?我嘗試搜索類名後跟一個*,但唯一出現的結果是數據類型和指針。

public: 
    APickUp(); 

    virtual void BeginPlay() override; 

    virtual void tick (float DeltaSeconds); 

private: 
    class UStaticMeshComponent* Pickup; 
+0

請不要張貼代碼的截圖。使用文本(如圖片所示)並將其格式化爲代碼(ctrl-k快捷方式) – bolov

回答

3
class UStaticMeshComponent* Pickup; 

這聲明類型class UStaticMeshComponent和還聲明類型指示器的可變PickupUStaticMeshComponent到。所以上面的代碼是或多或少相當於:

class UStaticMeshComponent; 
UStaticMeshComponent* Pickup; 

因爲這點你沒有的UStaticMeshComponent定義(不僅僅是聲明)的,UStaticMeshComponent被認爲是一個不完整的類型。有一些事情可以用不完整的類型來完成。其中之一是向他們宣佈指針。

1

當您只使用指向類型的指針時,類型不需要完整,所以即使沒有定義UStaticMeshComponent,也可以正常工作。這意味着當這個頭文件包含在你的一個cpp文件中時,它的編譯速度要比如果Pickup.h包含頭文件定義的UStaticMeshComponent更快。

這樣的加速可能會很大,具體取決於標題的大小以及在編譯過程中避免包含的次數。