chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

C++基礎(chǔ)語法之inline 內(nèi)聯(lián)函數(shù)

C語言編程學(xué)習(xí)基地 ? 來源:C語言編程學(xué)習(xí)基地 ? 作者:C語言編程 ? 2021-09-09 09:38 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

上節(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í)行進入函數(shù)的步驟,直接執(zhí)行函數(shù)體;

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

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

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

inline 使用

// 聲明1(加 inline,建議使用)inline int functionName(int first, int second,。。。);

// 聲明2(不加 inline)int functionName(int first, int second,。。。);

// 定義inline int functionName(int first, int second,。。。) {/****/};

// 類內(nèi)定義,隱式內(nèi)聯(lián)class A { int doA() { return 0; } // 隱式內(nèi)聯(lián)}

// 類外定義,需要顯式內(nèi)聯(lián)class A { int doA();}inline int A::doA() { return 0; } // 需要顯式內(nèi)聯(lián)

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

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

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

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

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

優(yōu)缺點

優(yōu)點

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

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

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

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

缺點

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

inline 函數(shù)無法隨著函數(shù)庫升級而升級。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)性的時候不能內(nèi)聯(lián)。

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

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

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

#include 《iostream》 using namespace std;class Base{public: inline virtual void who(){ cout 《《 “I am Base

”; } virtual ~Base() {}};class Derived : public Base{public: inline void who() // 不寫inline時隱式內(nèi)聯(lián){ cout 《《 “I am Derived

”; }};

int main(){ // 此處的虛函數(shù) who(),是通過類(Base)的具體對象(b)來調(diào)用的,編譯期間就能確定了,所以它可以是內(nèi)聯(lián)的,但最終是否內(nèi)聯(lián)取決于編譯器。 Base b; b.who();

// 此處的虛函數(shù)是通過指針調(diào)用的,呈現(xiàn)多態(tài)性,需要在運行時期間才能確定,所以不能為內(nèi)聯(lián)。 Base *ptr = new Derived(); ptr-》who();

// 因為Base有虛析構(gòu)函數(shù)(virtual ~Base() {}),所以 delete 時,會先調(diào)用派生類(Derived)析構(gòu)函數(shù),再調(diào)用基類(Base)析構(gòu)函數(shù),防止內(nèi)存泄漏。 delete ptr; ptr = nullptr;

system(“pause”); return 0;}

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

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

編輯:jq

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • Switch
    +關(guān)注

    關(guān)注

    1

    文章

    542

    瀏覽量

    61769
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4417

    瀏覽量

    67524
  • C++
    C++
    +關(guān)注

    關(guān)注

    22

    文章

    2124

    瀏覽量

    77126
  • 編譯器
    +關(guān)注

    關(guān)注

    1

    文章

    1672

    瀏覽量

    51626
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    keil實現(xiàn)cc++混合編程

    參考touchgfx生成的代碼,發(fā)現(xiàn)了一個不需要添加--cpp11 參數(shù)的解決方法,具體操作如下。 一、創(chuàng)建一個空白的C文件和頭文件在頭文件中定義c++文件中需要調(diào)用的函數(shù),如圖所示 二、在
    發(fā)表于 01-26 08:58

    C語言與C++的區(qū)別及聯(lián)系

    創(chuàng)建源文件時什么都不給,默認(rèn)是.cpp。 3、返回值 C語言中,如果一個函數(shù)沒有指定返回值類型,默認(rèn)返回int類型;C++中,如果一個函數(shù)沒有返回值則必須指定為void。 4、參
    發(fā)表于 12-24 07:23

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

    內(nèi)聯(lián)函數(shù)禁用所有的編譯選項。使用__inline修飾函數(shù)導(dǎo)致函數(shù)在調(diào)用處直接替換為函數(shù)體。這樣代
    發(fā)表于 12-12 07:08

    CC++之間的聯(lián)系

    1、語法兼容性: C++完全兼容C語言的語法,這意味著任何有效的C語言程序都可以直接在C++
    發(fā)表于 12-11 06:51

    C語言和C++之間的區(qū)別是什么

    區(qū)別 1、面向?qū)ο缶幊?(OOP): C語言是一種面向過程的語言,它強調(diào)的是通過函數(shù)將任務(wù)分解為一系列步驟進行執(zhí)行。 C++C語言的基礎(chǔ)上擴展了面向?qū)ο蟮奶匦?,支持?class)
    發(fā)表于 12-11 06:23

    C++程序異常的處理機制

    運行代碼進行分離,使得程序更加模塊化;另一方面,C++的異常處理可以不需要異常處理在異常發(fā)生時的同一個函數(shù),而是可以在更上層合適的位置進行處理。 下面,我們一起來看看C++的異常處理。 2、異常處理
    發(fā)表于 12-02 07:12

    inline ASM(內(nèi)聯(lián)匯編)的細節(jié)分享

    內(nèi)聯(lián)匯編,否則,仍然是帶有C++表達式的內(nèi)聯(lián)江編,此時\"instructionlist\"中的寄存器的寫法需要遵守相關(guān)的規(guī)定: 寄存器前必須使用兩個百分號(%%),而不是像
    發(fā)表于 10-31 09:11

    簡單的內(nèi)聯(lián)匯編介紹

    前言1、在程序中我們可以嵌入?yún)R編直接對我們加入的硬件進行相應(yīng)的操作 2、在RISC-V架構(gòu)中定義的CSR寄存器需要使用特殊的 CSR 指令進行訪問,如果在 C/C++程序中需要使用 CSR 寄存器
    發(fā)表于 10-30 08:04

    RISC-V的工具鏈GCC內(nèi)聯(lián)匯編

    具體實現(xiàn)方法和步驟 在RISC-V架構(gòu)中定義的CSR寄存器需要使用特殊的CSR指令進行訪問,如果C、C++程序中需要訪問CSR寄存器,只能使用內(nèi)嵌匯編指令的方法。在C、C++程序中嵌入
    發(fā)表于 10-30 06:59

    GCC內(nèi)聯(lián)匯編

    需要用到C/C++中的內(nèi)聯(lián)匯編語法asm volatile(“instructions”) 以在C代碼中嵌入?yún)R編以執(zhí)行自定義指令集。 __S
    發(fā)表于 10-24 07:46

    通過內(nèi)聯(lián)匯編調(diào)用乘法指令mulh\\mulhsu\\mulhu

    mulh、mulhu與mulhsu指令,不能直接驗證,需要其他方法。因此,我們想到了在C語言中嵌入內(nèi)聯(lián)匯編,分別生成三條指令的接口函數(shù),之后便只需在C語言中調(diào)用者三中
    發(fā)表于 10-24 06:52

    強實時運動控制內(nèi)核MotionRT750(六):us級高速交互C++,為智能裝備提速

    Windows下運動控制實時內(nèi)核MotionRT750的高速交互C++
    的頭像 發(fā)表于 09-04 14:50 ?743次閱讀
    強實時運動控制內(nèi)核MotionRT750(六):us級高速交互<b class='flag-5'>之</b><b class='flag-5'>C++</b>,為智能裝備提速

    將TLE9140 DeviceDriver移植到TLE9893時出現(xiàn)未知類型名稱“INLINE”,如何解決?

    ): 警告:在包含的文件中... ./RTE/Device/TLE9893_2QKW62Scmsis_misra.h(78): 錯誤:未知類型名稱“INLINE” 78 | 內(nèi)聯(lián) sint32 CMSIS_Irq_Dis(void); 我使用的環(huán)境是: 如何修復(fù)這個錯誤
    發(fā)表于 07-28 07:31

    C語言中的內(nèi)聯(lián)函數(shù)與宏

    C編程中,內(nèi)聯(lián)函數(shù)和宏都用于避免函數(shù)調(diào)用的開銷并編寫可復(fù)用的邏輯部分,但它們在工作方式和安全性方面存在顯著差異。
    的頭像 發(fā)表于 07-25 15:10 ?1918次閱讀
    <b class='flag-5'>C</b>語言中的<b class='flag-5'>內(nèi)聯(lián)</b><b class='flag-5'>函數(shù)</b>與宏

    MSP430常用內(nèi)聯(lián)函數(shù)說明

    電子發(fā)燒友網(wǎng)站提供《MSP430常用內(nèi)聯(lián)函數(shù)說明.docx》資料免費下載
    發(fā)表于 06-05 17:20 ?0次下載