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

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

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

inline函数

發(fā)布時(shí)間:2024/1/17 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 inline函数 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
Inline函數(shù)特征:
  • 相當(dāng)于把內(nèi)聯(lián)函數(shù)里面的內(nèi)容寫(xiě)在調(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ù)。

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

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

  • 內(nèi)聯(lián)函數(shù)同宏函數(shù)一樣將在被調(diào)用處進(jìn)行代碼展開(kāi),省去了參數(shù)壓棧、棧幀開(kāi)辟與回收,結(jié)果返回等,從而提高程序運(yùn)行速度。
  • 內(nèi)聯(lián)函數(shù)相比宏函數(shù)來(lái)說(shuō),在代碼展開(kāi)時(shí),會(huì)做安全檢查或自動(dòng)類型轉(zhuǎn)換(同普通函數(shù)),而宏定義則不會(huì)。
  • 在類中聲明同時(shí)定義的成員函數(shù),自動(dòng)轉(zhuǎn)化為內(nèi)聯(lián)函數(shù),因此內(nèi)聯(lián)函數(shù)可以訪問(wèn)類的成員變量,宏定義則不能。
  • 內(nèi)聯(lián)函數(shù)在運(yùn)行時(shí)可調(diào)試,而宏定義不可以。
  •   缺點(diǎn)

  • 代碼膨脹。內(nèi)聯(lián)是以代碼膨脹(復(fù)制)為代價(jià),消除函數(shù)調(diào)用帶來(lái)的開(kāi)銷。如果執(zhí)行函數(shù)體內(nèi)代碼的時(shí)間,相比于函數(shù)調(diào)用的開(kāi)銷較大,那么效率的收獲會(huì)很少。另一方面,每一處內(nèi)聯(lián)函數(shù)的調(diào)用都要復(fù)制代碼,將使程序的總代碼量增大,消耗更多的內(nèi)存空間。
  • inline 函數(shù)無(wú)法隨著函數(shù)庫(kù)升級(jí)而升級(jí)。inline函數(shù)的改變需要重新編譯,不像 non-inline 可以直接鏈接。
  • 是否內(nèi)聯(lián),程序員不可控。內(nèi)聯(lián)函數(shù)只是對(duì)編譯器的建議,是否對(duì)函數(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)行期,編譯器無(wú)法知道運(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)用的對(duì)象是哪個(gè)類(如?Base::who()),這只有在編譯器具有實(shí)際對(duì)象而不是對(duì)象的指針或引用時(shí)才會(huì)發(fā)生。
    ? #include <iostream> using namespace std; class Base { public:inline virtual void who(){cout << "I am Base\n";}virtual ~Base() {} }; class Derived : public Base { public:inline void who() // 不寫(xiě)inline時(shí)隱式內(nèi)聯(lián) {cout << "I am Derived\n";} };int main() {// 此處的虛函數(shù) who(),是通過(guò)類(Base)的具體對(duì)象(b)來(lái)調(diào)用的,編譯期間就能確定了,所以它可以是內(nèi)聯(lián)的,但最終是否內(nèi)聯(lián)取決于編譯器。 Base b;b.who();// 此處的虛函數(shù)是通過(guò)指針調(diào)用的,呈現(xiàn)多態(tài)性,需要在運(yùn)行時(shí)期間才能確定,所以不能為內(nèi)聯(lián)。 Base *ptr = new Derived();ptr->who();// 因?yàn)锽ase有虛析構(gòu)函數(shù)(virtual ~Base() {}),所以 delete 時(shí),會(huì)先調(diào)用派生類(Derived)析構(gòu)函數(shù),再調(diào)用基類(Base)析構(gòu)函數(shù),防止內(nèi)存泄漏。delete ptr;ptr = nullptr;system("pause");return 0; }

    參考鏈接:https://github.com/huihut/interview#優(yōu)缺點(diǎn)

    ?

    轉(zhuǎn)載于:https://www.cnblogs.com/single-dont/p/11421028.html

    總結(jié)

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

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