2011-07-02 63 views

回答

7

這是一個forward declaration

作爲C的宿醉,C++編譯器以一種從上到下的方式工作(或多或少)。如果您希望您的類C以某種方式(通過指針或引用)引用類A或類B,則編譯器必須事先知道它們的存在。

+0

在這種情況下呢? 'A級; B類 { func(A a); }' 所以在這種情況下,我不需要包含定義類A的頭並且只是向前聲明A? – cppcoder

+0

不,您只能在這種情況下聲明一個指針或引用「A」。 –

+1

這不僅僅是C的宿醉。如果不是這樣,編譯器將不得不記住每個未聲明的用法,並在編譯結束時回到它,如果這個名字在那之前沒有聲明的話。這會減慢編譯時間。另一種方法是多次解析代碼,這也意味着巨大的放緩。 – Nobody

3

這就是所謂的一個forward declaration。它允許你聲明一個指向該類型的指針而不包括它的定義。當然,由於就編譯器而言此定義不存在,因此只能聲明指向該類型的指針或引用,因爲編譯器不知道如何構造該類型的對象,即它不能確定其大小。

0

這被稱爲前向聲明,並允許在定義的類的原型中使用這些類。

1

通過正向聲明這樣的類,你告訴編譯器該類存在,不用擔心,你將在以後鏈接它們。

這不是將頭文件包含在完整定義中,而且如果編譯器不需要知道類是什麼樣的話就足夠了。例如,如果您只將指針引用到當前文件中的類。

相關問題