內(nèi)聯(lián)函數(shù)調(diào)用前必須完整嗎 為什么C 使用push函數(shù)?
為什么C 使用push函數(shù)?c提供了一個(gè)內(nèi)聯(lián)函數(shù)來(lái)減少函數(shù)調(diào)用的開(kāi)銷。內(nèi)聯(lián)函數(shù)是被調(diào)用時(shí)在行中擴(kuò)展的函數(shù)。內(nèi)聯(lián)函數(shù)相比宏定義增加空間開(kāi)銷嗎?學(xué)習(xí)內(nèi)聯(lián)函數(shù)時(shí),每次調(diào)用內(nèi)聯(lián)函數(shù)都要復(fù)制代碼,這樣會(huì)增加程
為什么C 使用push函數(shù)?
c提供了一個(gè)內(nèi)聯(lián)函數(shù)來(lái)減少函數(shù)調(diào)用的開(kāi)銷。內(nèi)聯(lián)函數(shù)是被調(diào)用時(shí)在行中擴(kuò)展的函數(shù)。
內(nèi)聯(lián)函數(shù)相比宏定義增加空間開(kāi)銷嗎?
學(xué)習(xí)內(nèi)聯(lián)函數(shù)時(shí),每次調(diào)用內(nèi)聯(lián)函數(shù)都要復(fù)制代碼,這樣會(huì)增加程序的總代碼,消耗更多的內(nèi)存空間。但是在定義宏的時(shí)候,調(diào)用代碼會(huì)在預(yù)處理的時(shí)候被宏代替。因此,這里的空間開(kāi)銷也會(huì)增加。
為什么只說(shuō)內(nèi)聯(lián)函數(shù)增加開(kāi)銷,而不說(shuō)宏定義?
Inline function是C引入的一種機(jī)制,用來(lái)解決使用宏定義的一些缺點(diǎn)。
1.為什么要引入內(nèi)聯(lián)函數(shù)(內(nèi)聯(lián)函數(shù)的作用)?
用它來(lái)代替宏定義,消除宏定義的缺點(diǎn)。宏定義是由預(yù)處理器實(shí)現(xiàn)的,替換了一些簡(jiǎn)單的字符,無(wú)法測(cè)試參數(shù)的有效性。此外,它的返回值可以 t被強(qiáng)制轉(zhuǎn)換成可轉(zhuǎn)換類型,C引入了類和類的訪問(wèn)控制,所以它可以 當(dāng)涉及到類的受保護(hù)成員和私有成員時(shí),不要用宏定義操作。
與宏定義相比有什么優(yōu)勢(shì)?
(1)將1)內(nèi)聯(lián)函數(shù)代碼放入符號(hào)表中,使用時(shí)像宏一樣展開(kāi),無(wú)需調(diào)用的開(kāi)銷非常高效;
(2)內(nèi)聯(lián)函數(shù)是實(shí)函數(shù),需要進(jìn)行一系列的數(shù)據(jù)類型檢查;
(3)作為類的成員函數(shù),內(nèi)聯(lián)函數(shù)可以使用該類的受保護(hù)成員和私有成員;
使用函數(shù)的地方
(1)凡是使用宏定義的地方都可以使用inline函數(shù);
(2)讀寫一個(gè)類的私有成員或保護(hù)成員作為類成員接口函數(shù);
4.為什么可以 不是所有的函數(shù)都可以寫成內(nèi)聯(lián)函數(shù)嗎?
內(nèi)聯(lián)函數(shù)是以代碼復(fù)雜度為代價(jià)的,節(jié)省了函數(shù)調(diào)用的開(kāi)銷,提高了執(zhí)行效率。因此,一方面,它不 如果內(nèi)聯(lián)函數(shù)中的代碼執(zhí)行時(shí)間大于函數(shù)調(diào)用開(kāi)銷,這沒(méi)有多大意義;另一方面,每次調(diào)用內(nèi)聯(lián)函數(shù)都需要復(fù)制代碼,這會(huì)消耗更多的內(nèi)存空間,因此在下列情況下不適合使用內(nèi)聯(lián)函數(shù)。
(1)函數(shù)體中的代碼較長(zhǎng),會(huì)導(dǎo)致內(nèi)存消耗的代價(jià);
(2)函數(shù)體內(nèi)有循環(huán),函數(shù)的執(zhí)行時(shí)間比函數(shù)調(diào)用的時(shí)間長(zhǎng);
另外,類的構(gòu)造函數(shù)和析構(gòu)函數(shù)不應(yīng)該寫成內(nèi)聯(lián)函數(shù)。
5.內(nèi)聯(lián)函數(shù)和宏定義的區(qū)別
(1)內(nèi)聯(lián)函數(shù)在編譯時(shí)擴(kuò)展,宏在預(yù)編譯時(shí)擴(kuò)展;
(2)內(nèi)聯(lián)函數(shù)直接嵌入目標(biāo)代碼,宏只是簡(jiǎn)單的做文本替換;
(3)內(nèi)聯(lián)函數(shù)有類型檢測(cè)和語(yǔ)法判斷功能,而宏沒(méi)有;
(4)內(nèi)聯(lián)函數(shù)是函數(shù),宏不是;
(5)定義宏時(shí)注意書寫(參數(shù)要括起來(lái)),否則容易產(chǎn)生歧義,內(nèi)聯(lián)函數(shù)不會(huì)有歧義;