最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊

C++基礎(chǔ)語法梳理:inline 內(nèi)聯(lián)函數(shù)!虛函數(shù)可以是內(nèi)聯(lián)函數(shù)嗎?

2021-09-04 18:34 作者:C語言編程__Plus  | 我要投稿

上節(jié)我們分析了C++基礎(chǔ)語法的const,static以及 this 指針,那么這節(jié)內(nèi)容我們來看一下 inline 內(nèi)聯(lián)函數(shù)吧!


inline 內(nèi)聯(lián)函數(shù)

特征

相當(dāng)于把內(nèi)聯(lián)函數(shù)里面的內(nèi)容寫在調(diào)用內(nèi)聯(lián)函數(shù)處;

相當(dāng)于不用執(zhí)行進(jìn)入函數(shù)的步驟,直接執(zhí)行函數(shù)體;

相當(dāng)于宏,卻比宏多了類型檢查,真正具有函數(shù)特性;

編譯器一般不內(nèi)聯(lián)包含循環(huán)、遞歸、switch 等復(fù)雜操作的內(nèi)聯(lián)函數(shù);

在類聲明中定義的函數(shù),除了虛函數(shù)的其他函數(shù)都會(huì)自動(dòng)隱式地當(dāng)成內(nèi)聯(lián)函數(shù)。

inline 使用

編譯器對 inline 函數(shù)的處理步驟

將 inline 函數(shù)體復(fù)制到 inline 函數(shù)調(diào)用點(diǎn)處;

為所用 inline 函數(shù)中的局部變量分配內(nèi)存空間;

將 inline 函數(shù)的的輸入?yún)?shù)和返回值映射到調(diào)用方法的局部變量空間中;

如果 inline 函數(shù)有多個(gè)返回點(diǎn),將其轉(zhuǎn)變?yōu)?inline 函數(shù)代碼塊末尾的分支(使用 GOTO)。

優(yōu)缺點(diǎn)

優(yōu)點(diǎn)

內(nèi)聯(lián)函數(shù)同宏函數(shù)一樣將在被調(diào)用處進(jìn)行代碼展開,省去了參數(shù)壓棧、棧幀開辟與回收,結(jié)果返回等,從而提高程序運(yùn)行速度。

內(nèi)聯(lián)函數(shù)相比宏函數(shù)來說,在代碼展開時(shí),會(huì)做安全檢查或自動(dòng)類型轉(zhuǎn)換(同普通函數(shù)),而宏定義則不會(huì)。

在類中聲明同時(shí)定義的成員函數(shù),自動(dòng)轉(zhuǎn)化為內(nèi)聯(lián)函數(shù),因此內(nèi)聯(lián)函數(shù)可以訪問類的成員變量,宏定義則不能。

內(nèi)聯(lián)函數(shù)在運(yùn)行時(shí)可調(diào)試,而宏定義不可以。

缺點(diǎn)

代碼膨脹。內(nèi)聯(lián)是以代碼膨脹(復(fù)制)為代價(jià),消除函數(shù)調(diào)用帶來的開銷。如果執(zhí)行函數(shù)體內(nèi)代碼的時(shí)間,相比于函數(shù)調(diào)用的開銷較大,那么效率的收獲會(huì)很少。另一方面,每一處內(nèi)聯(lián)函數(shù)的調(diào)用都要復(fù)制代碼,將使程序的總代碼量增大,消耗更多的內(nèi)存空間。

inline 函數(shù)無法隨著函數(shù)庫升級(jí)而升級(jí)。inline函數(shù)的改變需要重新編譯,不像 non-inline 可以直接鏈接。

是否內(nèi)聯(lián),程序員不可控。內(nèi)聯(lián)函數(shù)只是對編譯器的建議,是否對函數(shù)內(nèi)聯(lián),決定權(quán)在于編譯器。


虛函數(shù)(virtual)可以是內(nèi)聯(lián)函數(shù)(inline)嗎?

虛函數(shù)可以是內(nèi)聯(lián)函數(shù),內(nèi)聯(lián)是可以修飾虛函數(shù)的,但是當(dāng)虛函數(shù)表現(xiàn)多態(tài)性的時(shí)候不能內(nèi)聯(lián)。

內(nèi)聯(lián)是在編譯器建議編譯器內(nèi)聯(lián),而虛函數(shù)的多態(tài)性在運(yùn)行期,編譯器無法知道運(yùn)行期調(diào)用哪個(gè)代碼,因此虛函數(shù)表現(xiàn)為多態(tài)性時(shí)(運(yùn)行期)不可以內(nèi)聯(lián)。

inline virtual?唯一可以內(nèi)聯(lián)的時(shí)候是:編譯器知道所調(diào)用的對象是哪個(gè)類(如?Base::who()),這只有在編譯器具有實(shí)際對象而不是對象的指針或引用時(shí)才會(huì)發(fā)生。

虛函數(shù)內(nèi)聯(lián)使用

那么今天的分享就到這里了,希望對大家有幫助~喜歡的話可以支持一下喲!

寫在最后:對于準(zhǔn)備學(xué)習(xí)C/C++編程的小伙伴,如果你想更好的提升你的編程核心能力(內(nèi)功)不妨從現(xiàn)在開始!

微信公眾號(hào):C語言編程學(xué)習(xí)基地

整理分享(多年學(xué)習(xí)的源碼、項(xiàng)目實(shí)戰(zhàn)視頻、項(xiàng)目筆記,基礎(chǔ)入門教程)

歡迎轉(zhuǎn)行和學(xué)習(xí)編程的伙伴,利用更多的資料學(xué)習(xí)成長比自己琢磨更快哦!



C++基礎(chǔ)語法梳理:inline 內(nèi)聯(lián)函數(shù)!虛函數(shù)可以是內(nèi)聯(lián)函數(shù)嗎?的評論 (共 條)

分享到微博請遵守國家法律
石柱| 临城县| 嘉峪关市| 双江| 林芝县| 东台市| 兴安盟| 和顺县| 安吉县| 酒泉市| 彭阳县| 双牌县| 绥德县| 惠水县| 三都| 大英县| 唐山市| 弥勒县| 商城县| 惠东县| 聊城市| 页游| 古蔺县| 长汀县| 龙胜| 崇阳县| 军事| 泰安市| 奇台县| 恩施市| 嘉义市| 青阳县| 新龙县| 侯马市| 大悟县| 墨竹工卡县| 育儿| 卢湾区| 罗田县| 尼木县| 巴林左旗|