日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > c/c++ >内容正文

c/c++

复习笔记(四)——C++内联函数

發(fā)布時(shí)間:2025/3/21 c/c++ 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 复习笔记(四)——C++内联函数 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

什么是內(nèi)聯(lián)函數(shù)

內(nèi)聯(lián)函數(shù)是指通過(guò) inline 關(guān)鍵字定義的函數(shù),包括全局函數(shù)和類的成員函數(shù)。

內(nèi)聯(lián)函數(shù)在編譯階段展開,編譯器將整個(gè)函數(shù)體代碼嵌入到調(diào)用處,不產(chǎn)生函數(shù)跳轉(zhuǎn)。

內(nèi)聯(lián)函數(shù)的定義

inline 關(guān)鍵字必須用于函數(shù)體定義,在函數(shù)聲明前使用無(wú)效

inline int add(int x, int y); // 聲明處使用無(wú)效 int add(int x, int y); //正確聲明方式inline int add(int x, int y) { // 定義處使用有效return x + y; }

內(nèi)聯(lián)函數(shù)優(yōu)劣

優(yōu)點(diǎn):
①函數(shù)內(nèi)聯(lián)可以避免了頻繁調(diào)用函數(shù)對(duì)棧內(nèi)存重復(fù)開辟所帶來(lái)的消耗,提高運(yùn)行效率。
②內(nèi)聯(lián)函數(shù)可以允許全局函數(shù)重復(fù)定義,編譯時(shí)會(huì)選取編譯單元可見的函數(shù)進(jìn)行內(nèi)聯(lián)。

缺點(diǎn):
內(nèi)聯(lián)函數(shù)適用于頻繁調(diào)用的短小函數(shù),如果濫用,則也存在很多危害,比如:
①編譯和鏈接的時(shí)間會(huì)更慢
②代碼膨脹,占用更多的內(nèi)存。
③影響 cpu 緩存優(yōu)化,降低運(yùn)行時(shí)性能。

inline 限制

inline 關(guān)鍵字僅僅是一種對(duì)編譯器的建議,是否真的發(fā)生內(nèi)聯(lián),要看編譯器的分析,比如下面場(chǎng)景編譯器會(huì)拒絕內(nèi)聯(lián):

  • 函數(shù)體內(nèi)部包含循環(huán)、遞歸、switch語(yǔ)句。
  • 函數(shù)過(guò)于復(fù)雜,復(fù)雜到函數(shù)本身執(zhí)行的成本,比函數(shù)調(diào)用(棧開銷)成本還要高。
  • inline 可以修飾虛函數(shù),但是當(dāng)虛函數(shù)表現(xiàn)多態(tài)性的時(shí)候不能內(nèi)聯(lián),因?yàn)闊o(wú)法知道具體將哪一部分代碼插入到調(diào)用位置。

與宏定義區(qū)別

內(nèi)聯(lián)函數(shù)和帶參數(shù)的宏定義類似,都可以避免函數(shù)調(diào)用的開銷,但是有以下區(qū)別

  • 內(nèi)聯(lián)函數(shù)在編譯時(shí)展開,宏在預(yù)編譯時(shí)展開
  • 內(nèi)聯(lián)函數(shù)直接嵌入到目標(biāo)代碼中,宏是簡(jiǎn)單的做文本替換
  • 內(nèi)聯(lián)函數(shù)有類型檢測(cè)、語(yǔ)法判斷等功能,而宏沒(méi)有
  • inline 函數(shù)是函數(shù),宏不是
  • 宏定義時(shí)要注意書寫(參數(shù)要括起來(lái))否則容易出現(xiàn)歧義,內(nèi)聯(lián)函數(shù)不會(huì)產(chǎn)生歧義

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

對(duì)調(diào)用頻繁且代碼簡(jiǎn)單的成員函數(shù)可以使用內(nèi)聯(lián)函數(shù). 則編譯時(shí)此內(nèi)聯(lián)函數(shù)的執(zhí)行代碼會(huì)插入到每個(gè)調(diào)用它的地方

內(nèi)聯(lián)函數(shù)在類中的聲明
隱式聲明:把函數(shù)執(zhí)行代碼寫在類主體內(nèi)
顯式聲明:為了程序的可讀性,一般為顯式聲明, 即函數(shù)實(shí)現(xiàn)時(shí)返回值類型前加inline; 類主體內(nèi)如同一般的成員函數(shù)聲明

示例:

class A { public:void count(int x, int y)// 函數(shù)聲明 } //顯示聲明 inline void A::count(int x, int y) // 表明是一個(gè)內(nèi)聯(lián)函數(shù) { }// 若是定義在類內(nèi),就是隱式內(nèi)聯(lián)了,比如, //沒(méi)有inline關(guān)鍵字,但系統(tǒng)默認(rèn)count是內(nèi)聯(lián)函數(shù) class A { public: void count(int x, int y){ /****/ } }

總結(jié)

以上是生活随笔為你收集整理的复习笔记(四)——C++内联函数的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。