c++中的前置引用聲明

c++編程經(jīng)驗(yàn)

1.關(guān)于前置引用聲明

最近用到一些前置聲明,所以做了一些研究。
前置聲明的原理:只能定義指針或者引用,因?yàn)榫幾g器已經(jīng)知道分配多大的內(nèi)存了。
有人說(shuō)不必要的include,會(huì)減少編譯時(shí)間。(不在.h中include,難道就不用在.cpp中包含了嗎?),所以減少頭文件之間的循環(huán)include,是前置聲明的一大作用。

2.定義

類的向前引用聲明只適用于指針和引用。

class A;
class B
{
public:
  A* m_a; //(不能A m_a)
}

3.向前聲明的限制

(1)不能定義foo類的對(duì)象;

(2)可以用于定義指向這個(gè)類型的指針或引用。(很有價(jià)值的東西);

(3)用于聲明(不是定義)使用該類型作為形參或者返回類型的函數(shù)。

4.實(shí)例

c++編譯器做的事情主要是:1.掃描符號(hào);2.確定對(duì)象大小。
所以很多時(shí)候并不需要將類都include進(jìn)來(lái)。
比如:

  • 1.由于所有對(duì)象類型的引用所占用的空間都是相同大的,所以c++編譯器很好確認(rèn)對(duì)象大小。
class string;
class Sample
{
private:
  string &s;
}

這里只需要做一個(gè)string的前向聲明就可以了,不需要#include <string>,因?yàn)橐煤椭羔樁际枪潭ù笮〉摹?/p>

  • 2.聲明成員函數(shù)的形參或者是返回類型,也可以利用前向聲明的性質(zhì)
class string;
class foo;
class Sample
{
public:
    foo foo_test(foo &);
private:
    string &s;
    foo *f;
};

這里,我根本沒(méi)有定義一個(gè)foo類,但是還是可以這樣用,因?yàn)槌蓡T函數(shù)不占類對(duì)象的大小,所以c++編譯器還是可以確定對(duì)象的大小。

前向聲明的作用在于告訴編譯器這是一個(gè)在別的地方定義的類型。這樣C++編譯器就能生成正確的符號(hào)表了。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy閱讀 9,680評(píng)論 1 51
  • 1.ios高性能編程 (1).內(nèi)層 最小的內(nèi)層平均值和峰值(2).耗電量 高效的算法和數(shù)據(jù)結(jié)構(gòu)(3).初始化時(shí)...
    歐辰_OSR閱讀 30,251評(píng)論 8 265
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒(méi)有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對(duì)...
    cosWriter閱讀 11,666評(píng)論 1 32
  • 很久以前,有個(gè)小和尚,想學(xué)會(huì)理發(fā)來(lái)幫寺廟的和尚剃發(fā)。于是他就開(kāi)始用冬瓜練習(xí),只是每次打水洗冬瓜時(shí)總要順手把...
    簡(jiǎn)書(shū)jianshu1閱讀 1,225評(píng)論 0 2
  • 文/ 陳皓 又是初冬月圓 輕柔的月光飄進(jìn)營(yíng)房 一個(gè)女兵值班在機(jī)房的崗位上 躁動(dòng)的思緒經(jīng)不住溫柔的誘惑 隨月光飛出窗...
    沂蒙文學(xué)閱讀 1,074評(píng)論 24 18

友情鏈接更多精彩內(nèi)容