下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第C++11中內(nèi)聯(lián)函數(shù)(inline)用法實(shí)例目錄inline是什么?引入inline的目的是什么?內(nèi)聯(lián)函數(shù)的特點(diǎn)內(nèi)聯(lián)函數(shù)的寫法隱式內(nèi)聯(lián)和顯式內(nèi)聯(lián)inline函數(shù)的編譯器處理內(nèi)聯(lián)函數(shù)優(yōu)缺點(diǎn)虛函數(shù)可以是內(nèi)聯(lián)函數(shù)嗎?虛函數(shù)內(nèi)聯(lián)條件?虛函數(shù)表現(xiàn)多態(tài)性的時候不能內(nèi)聯(lián)總結(jié)
inline是什么?
inline是C++11引入的關(guān)鍵字,在函數(shù)聲明or定義時,返回類型前加上關(guān)鍵字inline,即可以把函數(shù)指定為內(nèi)聯(lián)函數(shù)。
引入inline的目的是什么?
目的是解決一些頻繁調(diào)用的函數(shù)大量消耗??臻g(棧內(nèi)存)的問題。另一方面用于替換C語言的宏(相比較宏是無法在進(jìn)行類型檢查)
內(nèi)聯(lián)函數(shù)的特點(diǎn)
內(nèi)聯(lián)函數(shù)的函數(shù)內(nèi)容本質(zhì)上是寫在調(diào)用內(nèi)聯(lián)函數(shù)的地方;內(nèi)聯(lián)函數(shù)本質(zhì)上沒有入棧出棧的開銷;和宏定義相比,內(nèi)聯(lián)函數(shù)更加安全,編譯器會根據(jù)函數(shù)的要求進(jìn)行嚴(yán)格的類型和作用域檢查,保證調(diào)用無誤;內(nèi)聯(lián)函數(shù)一般上不包含循環(huán)、遞歸、switch或較長的代碼等復(fù)雜操作;類聲明中定義的函數(shù),除虛函數(shù)外的其他函數(shù)都會自動隱式地當(dāng)成內(nèi)聯(lián)函數(shù);
內(nèi)聯(lián)函數(shù)的寫法
這里的一個關(guān)鍵點(diǎn),inline必須與函數(shù)定義放在一起才能使函數(shù)成為內(nèi)聯(lián)函數(shù),僅將inline放在函數(shù)聲明前面不起任何作用。
inline是一種用于實(shí)現(xiàn)的關(guān)鍵字,不是一種用于聲明的關(guān)鍵字。
//在頭文件中可以進(jìn)行顯示聲明
//方式1加inline(建議使用)
inlineintTestFunc(inta,intb);
//方式2原始常見聲明方式
intTestFunc(inta,intb);
//在源文件中定義
inlineintTestFunc(inta,intb){
//dosomething
return0;
intTestFunc(inta,intb){
//dosomething
return0;
隱式內(nèi)聯(lián)和顯式內(nèi)聯(lián)
隱式內(nèi)聯(lián)的寫法
classCppObj{
intTestFuncA(){return0;}//隱式內(nèi)聯(lián)
vitrualintTestFuncB(){return0;}//虛函數(shù)不會進(jìn)行隱式內(nèi)聯(lián)
顯式內(nèi)聯(lián)的寫法
classCppObj{
intTestFuncA();
inlineintTestFuncB();
vitrualintTestFuncC();
inlineintCppObj::TestFuncA(){//顯式內(nèi)聯(lián)
return0;
inlineintCppObj::TestFuncB(){//顯式內(nèi)聯(lián)
return0;
inline函數(shù)的編譯器處理
inline函數(shù)僅僅是一個開發(fā)者對編譯器的建議,至于最后能否真正內(nèi)聯(lián),需要看編譯器的意思。如果編譯器判定函數(shù)不復(fù)雜,能在調(diào)用點(diǎn)展開,就會真正內(nèi)聯(lián)。
內(nèi)聯(lián)函數(shù)優(yōu)缺點(diǎn)
優(yōu)點(diǎn)內(nèi)聯(lián)函數(shù)相比宏函數(shù)來說,在代碼調(diào)用時會做安全檢查和類型轉(zhuǎn)換(同普通函數(shù)),而宏定義則不會;宏定義不可以在運(yùn)行時可調(diào)試,但內(nèi)聯(lián)函數(shù)可以;內(nèi)聯(lián)函數(shù)同宏函數(shù)一樣會在被調(diào)用處進(jìn)行展開,無需參數(shù)壓棧、棧幀開辟與回收,結(jié)果返回等,從而能提高代碼的運(yùn)行速度。缺點(diǎn)代碼膨脹。內(nèi)聯(lián)是以代碼膨脹(復(fù)制)為代價,是典型的以空間換時間的做法。內(nèi)聯(lián)函數(shù)不可控。內(nèi)聯(lián)函數(shù)只是編碼者對編譯器的建議,是否對函數(shù)內(nèi)聯(lián),最終決定權(quán)在于編譯器。inline函數(shù)無法隨著函數(shù)庫升級而升級。inline函數(shù)的改變需要重新編譯,不像non-inline可以直接鏈接。
虛函數(shù)可以是內(nèi)聯(lián)函數(shù)嗎?
虛函數(shù)可以是內(nèi)聯(lián)函數(shù);inline是可以修飾虛函數(shù);
虛函數(shù)內(nèi)聯(lián)條件?
可以內(nèi)聯(lián)的條件,編譯器具有實(shí)際對象而不是對象的指針或引用時才會,所以當(dāng)虛函數(shù)表現(xiàn)多態(tài)性的時候不能內(nèi)聯(lián)。
虛函數(shù)表現(xiàn)多態(tài)性的時候不能內(nèi)聯(lián)
內(nèi)聯(lián)是在編譯期進(jìn)行的,但虛函數(shù)的多態(tài)性在運(yùn)行期,所以編譯器無法知曉運(yùn)行期具體調(diào)用哪個代碼
代碼釋義
#includeiostream
usingnamespacestd;
classBase{
public:
virtual~Base(){}
inlinevirtualvoidFuncName(){cout"thisisBase"endl;}
classDerived:publicBase{
public:
inlinevirtualvoidFuncName(){cout"thisisDerived"endl;}
intmain()
//編譯器具有實(shí)際對象,所以它可以是內(nèi)聯(lián)的.
Baseb;
b.FuncName();
//編譯器具有對象的指針,呈現(xiàn)多態(tài)性,運(yùn)行時期才能確定,所以不能內(nèi)聯(lián)。
Base*p=newDerived();
p-FuncName();
deletep;
p=nullptr;
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 外勤機(jī)械工復(fù)試考核試卷含答案
- 刨插工安全培訓(xùn)效果評優(yōu)考核試卷含答案
- 玻璃制品手工成型工安全宣傳強(qiáng)化考核試卷含答案
- 海鹽采收工班組建設(shè)競賽考核試卷含答案
- 絞車操作工安全素養(yǎng)競賽考核試卷含答案
- 磚瓦生產(chǎn)工安全素養(yǎng)測試考核試卷含答案
- 海南房產(chǎn)中介培訓(xùn)課程
- 酒店員工培訓(xùn)計(jì)劃實(shí)施與跟蹤制度
- 酒店客房用品更換與補(bǔ)給制度
- 超市員工培訓(xùn)及業(yè)務(wù)知識制度
- 家居行業(yè)投資合作合同(2025修訂版)
- 2025年高三語文10月考聯(lián)考作文匯編(解析+立意+范文)
- 2025年人工智慧行業(yè)人工智能技術(shù)與智能操作系統(tǒng)研究報告
- 供應(yīng)商管理績效綜合評價表
- 破產(chǎn)業(yè)務(wù)培訓(xùn)課件
- 蓖麻醇酸鋅復(fù)合除味劑的制備及其除臭效能研究
- 王者輔助教學(xué)課件
- 警用偵查無人機(jī)偵查技術(shù)在反偷獵中的應(yīng)用分析報告
- 2025-2026秋“1530”安全教育記錄表
- 執(zhí)法中心設(shè)計(jì)方案(3篇)
- 藥物警戒基礎(chǔ)知識全員培訓(xùn)
評論
0/150
提交評論