前置宣告(Forward declaration)

2021-05-24 00:56:51 字數 345 閱讀 1506

前置宣告是指宣告乙個類或結構體而不定義它,比如:

class a;

struct b;

在宣告之後,定義之前,該類或結構體被稱為不完全型別(incompletion type),意思是,知道型別a和b,但不知道他包含哪些內容

不完全型別的使用有一些限制,不如不能用它來定義物件,但可以定義指象該型別物件的指標,比如不但定義 a  a; b b;,但可以定義

a* a;

b *b;

原因是因為編譯器不知道a和b有多大,所以無法構造物件,但是指標的型別是確定的4個位元組,編譯器就可以構造。

不完全型別也可用於宣告(而不是定義)使用該型別作為形參型別或返回型別的函式.

C 前置宣告

特點 被宣告的類不用重新編譯,節省編譯時間 比如a包含乙個指向b的指標,b包含a的乙個例項,這種情況下,使用前置宣告。易錯的點 class date class task1 因為分配器為d分配記憶體的時候,必須要知道 d的大小 主要應用場景是兩個標頭檔案相互包含的場景,建議僅將前置宣告用於解決迴圈引...

C 前置宣告

一般的前置函式宣告 見過最多的前置函式宣告,基本格式 如下 1 include 2 using namespace std 34 void fun char ch,int pvalue,double dvalue 56 void main 714 15void fun char ch,int pva...

C 前置宣告

問題 最近遇到了兩個類a b相互呼叫的情況,於是想當然的在兩個類a和b的標頭檔案中 include 了所需的標頭檔案,當然結果編譯報錯了。為什麼呢,a需要b,b需要a,形成了迴圈,違反了程式的確定性原則。如下圖所示 如這樣相互包含的問題,可以使用前置宣告來解決。即 在標頭檔案中宣告該類,在實現檔案中...