inline內(nèi)聯(lián)函數(shù) 內(nèi)聯(lián)函數(shù)和宏定義的區(qū)別?
內(nèi)聯(lián)函數(shù)和宏定義的區(qū)別??jī)?nèi)聯(lián)函數(shù)和宏的區(qū)別:傳統(tǒng)的宏定義函數(shù)可能會(huì)帶來(lái)一些麻煩。例如:#define f(x)x x void main(){int i=1F(i)},其中x將被添加兩次。內(nèi)聯(lián)函數(shù)由編
內(nèi)聯(lián)函數(shù)和宏定義的區(qū)別?
內(nèi)聯(lián)函數(shù)和宏的區(qū)別:傳統(tǒng)的宏定義函數(shù)可能會(huì)帶來(lái)一些麻煩。例如:#define f(x)x x void main(){int i=1F(i)},其中x將被添加兩次。內(nèi)聯(lián)函數(shù)由編譯器以函數(shù)的形式自動(dòng)添加到代碼中,這是不會(huì)發(fā)生的。內(nèi)聯(lián)函數(shù)的使用提高了效率(節(jié)省了大量的函數(shù)調(diào)用匯編代碼,如call和RET)。
C 中,內(nèi)聯(lián)函數(shù)和宏定義的區(qū)別是什么?
宏是一個(gè)簡(jiǎn)單的字符串替換。如果可能,內(nèi)聯(lián)函數(shù)被嵌入到編譯器調(diào)用函數(shù)的位置,這在邏輯上是正確的。此外,宏擴(kuò)展必須被替換,當(dāng)編譯器認(rèn)為內(nèi)聯(lián)函數(shù)不能被嵌入時(shí),內(nèi)聯(lián)函數(shù)被編譯為普通函數(shù)。
內(nèi)聯(lián)函數(shù)相比宏定義增加空間開(kāi)銷嗎?
內(nèi)聯(lián)函數(shù)是C為解決使用宏定義的一些缺點(diǎn)而引入的一種機(jī)制。
1. 為什么要引入內(nèi)聯(lián)函數(shù)(內(nèi)聯(lián)函數(shù)的函數(shù))
來(lái)代替宏定義,消除宏定義的缺點(diǎn)。宏定義是由預(yù)處理器實(shí)現(xiàn)的,它進(jìn)行了一些簡(jiǎn)單的字符替換,無(wú)法檢測(cè)參數(shù)的有效性。此外,它的返回值不能強(qiáng)制轉(zhuǎn)換為合適的類型,C中引入了類和類訪問(wèn)控制,當(dāng)涉及到類的受保護(hù)成員和私有成員時(shí),不能通過(guò)宏定義進(jìn)行操作。
2. 內(nèi)聯(lián)函數(shù)與宏定義相比有哪些優(yōu)點(diǎn)!](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)內(nèi)聯(lián)函數(shù)是類,內(nèi)聯(lián)函數(shù)可以使用該類的受保護(hù)成員和私有成員;
3。內(nèi)聯(lián)函數(shù)的使用
](1)內(nèi)聯(lián)函數(shù)可以在任何使用宏定義的地方使用;
(2)作為類成員接口函數(shù)讀寫類的私有或受保護(hù)成員;
4。為什么不能把所有函數(shù)都寫成內(nèi)聯(lián)函數(shù)
內(nèi)聯(lián)函數(shù)以復(fù)雜代碼為代價(jià)提高了執(zhí)行效率,從而節(jié)省了函數(shù)調(diào)用的成本。因此,一方面,如果內(nèi)聯(lián)函數(shù)的內(nèi)部代碼的執(zhí)行時(shí)間大于函數(shù)調(diào)用的執(zhí)行時(shí)間,則意義不大;另一方面,內(nèi)聯(lián)函數(shù)的每次調(diào)用都需要復(fù)制代碼,占用更多的內(nèi)存空間,因此,在以下情況下不適合使用內(nèi)聯(lián)函數(shù)。
(1)函數(shù)體中的代碼比較長(zhǎng),會(huì)導(dǎo)致內(nèi)存消耗的代價(jià);
(2)函數(shù)體中有循環(huán),因此函數(shù)的執(zhí)行時(shí)間比函數(shù)調(diào)用的執(zhí)行時(shí)間要長(zhǎng),類的構(gòu)造和析構(gòu)函數(shù)不應(yīng)作為內(nèi)聯(lián)函數(shù)編寫。
5. 內(nèi)聯(lián)函數(shù)與宏定義的區(qū)別
](1)內(nèi)聯(lián)函數(shù)在編譯時(shí)展開(kāi),宏在預(yù)編譯時(shí)展開(kāi);(2)內(nèi)聯(lián)函數(shù)直接嵌入目標(biāo)代碼,宏是簡(jiǎn)單的文本替換;(3)內(nèi)聯(lián)函數(shù)有類型檢測(cè)、語(yǔ)法判斷等功能,但宏不;
(4)內(nèi)聯(lián)函數(shù)是函數(shù),宏不是;
(5)宏定義要注意寫(參數(shù)要圍起來(lái))否則,很容易有歧義,內(nèi)聯(lián)函數(shù)就不會(huì)有歧義;
宏和內(nèi)聯(lián)函數(shù)的區(qū)別是什么?
宏做了一個(gè)簡(jiǎn)單的字符串替換,編譯前用宏體替換宏名稱。首先,內(nèi)聯(lián)函數(shù)是一個(gè)函數(shù),它將傳遞參數(shù)并在編譯后執(zhí)行。其次,作為內(nèi)聯(lián)函數(shù),它是將一個(gè)非常簡(jiǎn)單的函數(shù)“嵌入”到調(diào)用程序代碼中,以減少時(shí)間和空間開(kāi)銷。