最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++中inline函數(shù)詳解

 更新時(shí)間:2015年07月06日 12:09:49   投稿:hebedich  
inline函數(shù)的定義:在函數(shù)聲明或定義中函數(shù)返回類(lèi)型前加上關(guān)鍵字inline,即可以把函數(shù)指定為內(nèi)聯(lián)函數(shù)。inline函數(shù)對(duì)編譯器而言必須是可見(jiàn)的,以便它能夠在調(diào)用點(diǎn)展開(kāi)該函數(shù)。

本文主要記錄了C++中的inline函數(shù),也就是內(nèi)聯(lián)函數(shù),主要記錄了以下幾個(gè)問(wèn)題:

一、C++為什么引入inline函數(shù)?

主要目的:用它代替C語(yǔ)言中表達(dá)式形式的宏定義來(lái)解決程序中函數(shù)調(diào)用的效率問(wèn)題。

C語(yǔ)言中的宏定義:#define ExpressionName(var1,var2) (var1+var2)*(var1-var2)這種宏定義,它使用預(yù)處理器實(shí)現(xiàn),沒(méi)有了參數(shù)壓棧、代碼生成等一系列得到操作,因此效率很高。但缺點(diǎn)如下:

僅僅是做預(yù)處理器符號(hào)表中的簡(jiǎn)單替換,因此不能進(jìn)行參數(shù)有效性的檢測(cè),不能享受C++編譯器嚴(yán)格類(lèi)型檢查的好處。
另外,它的返回值也不能被強(qiáng)制轉(zhuǎn)換為可轉(zhuǎn)換的合適類(lèi)型。
還有,C++引入了類(lèi)及類(lèi)的訪問(wèn)控制,這樣,如果一個(gè)操作或者說(shuō)一個(gè)表達(dá)式涉及類(lèi)的保護(hù)成員或者私有成員,這種宏定義就無(wú)法實(shí)現(xiàn)(因?yàn)闊o(wú)法將this指針?lè)旁诤线m的位置上)

二、為什么inline能很好的取代表達(dá)式形式的預(yù)定義?

inline定義類(lèi)的內(nèi)聯(lián)函數(shù),函數(shù)的代碼被放入符號(hào)表中,在使用時(shí)直接進(jìn)行替換(像宏一樣展開(kāi))沒(méi)有了調(diào)用的開(kāi)銷(xiāo),效率也高了。
類(lèi)的內(nèi)聯(lián)函數(shù)也是一個(gè)真正的函數(shù)。編譯器在調(diào)用一個(gè)內(nèi)聯(lián)函數(shù)的時(shí)候,首先進(jìn)行一系列的檢測(cè)(參數(shù)的類(lèi)型)
inline函數(shù)可以作為某個(gè)類(lèi)的成員函數(shù),這就可以在其中使用該類(lèi)的保護(hù)成員和私有成員。

三、inline函數(shù)的使用場(chǎng)合

示例代碼:

由上述示例代碼可知:A類(lèi)的2個(gè)成員函數(shù)都是inline函數(shù),readTest()函數(shù)的定義在類(lèi)內(nèi),所以自動(dòng)轉(zhuǎn)化為inline函數(shù),setTest()函數(shù)的定義在類(lèi)外,所以必須加inline關(guān)鍵字。類(lèi)的成員常定義成保護(hù)和私有的,外界不能直接訪問(wèn)這些成員,所以必須有成員接口函數(shù)來(lái)訪問(wèn)。這些接口函數(shù)被定義成inline函數(shù),會(huì)獲得比較好的效果。所以,inline函數(shù)常用于定義存取函數(shù)(代碼簡(jiǎn)短),inline函數(shù)的效率比較高。

四、為什么不把所有的函數(shù)定義成inline函數(shù)?

inline是以代碼的膨脹(復(fù)制)為待見(jiàn)的,僅僅省去了函數(shù)調(diào)用的開(kāi)銷(xiāo),從而提高了函數(shù)的執(zhí)行效率。如果,執(zhí)行函數(shù)體內(nèi)代碼的時(shí)間相比于函數(shù)調(diào)用的開(kāi)銷(xiāo)大,那么效率的收獲會(huì)很少。另一方面,每一個(gè)inline函數(shù)的調(diào)用都要復(fù)制代碼,使程序的總代碼量增大,消耗更多的內(nèi)存空間。
所以:

函數(shù)的代碼量比較大時(shí),使用inline函數(shù)會(huì)使內(nèi)存消耗代價(jià)較高。
函數(shù)體內(nèi)出現(xiàn)循環(huán),那么執(zhí)行函數(shù)的時(shí)間要比函數(shù)調(diào)用的開(kāi)銷(xiāo)大。
另外,類(lèi)的構(gòu)造函數(shù)和析構(gòu)函數(shù)容易讓人誤解成使用inline更有效。要當(dāng)心構(gòu)造函數(shù)和析構(gòu)函數(shù)可能會(huì)隱藏一些行為,如“偷偷地執(zhí)行基類(lèi)或成員對(duì)象的構(gòu)造函數(shù)和析構(gòu)函數(shù)。”
一個(gè)好的編譯器會(huì)根據(jù)函數(shù)體,自動(dòng)取消不適合的inline函數(shù)。(說(shuō)明了,inline不應(yīng)該出現(xiàn)在類(lèi)的內(nèi)部,及函數(shù)的聲明的部分)

五、inline函數(shù)與宏的區(qū)別?

inline是在 編譯 時(shí)展開(kāi)的,而宏是在 預(yù)編譯 時(shí)展開(kāi)的。
在編譯時(shí),inline函數(shù)可以直接嵌套到目標(biāo)代碼里,而宏只是簡(jiǎn)單地文本替換
inline函數(shù)可以完成類(lèi)型和語(yǔ)句是否正確,而宏不具有這樣的功能。
inline函數(shù)是函數(shù),而宏不是函數(shù)。
宏的定義時(shí),小心參數(shù)的處理(一般把參數(shù)用括號(hào)括起來(lái)),否則會(huì)引起二義性,而inline函數(shù)不用擔(dān)心二義性。

以上所述就是本文的全部?jī)?nèi)容了,希望大家能夠喜歡。

相關(guān)文章

  • C語(yǔ)言編程中對(duì)目錄進(jìn)行基本的打開(kāi)關(guān)閉和讀取操作詳解

    C語(yǔ)言編程中對(duì)目錄進(jìn)行基本的打開(kāi)關(guān)閉和讀取操作詳解

    這篇文章主要介紹了C語(yǔ)言編程中對(duì)目錄進(jìn)行基本的打開(kāi)關(guān)閉和讀取操作,是C語(yǔ)言入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-09-09
  • c++中bitset的常見(jiàn)用法示例詳解

    c++中bitset的常見(jiàn)用法示例詳解

    C++ 中的?bitset?是一個(gè)用于處理固定大小位序列的模板類(lèi),提供高效的位操作功能,這篇文章主要介紹了c++中bitset的常見(jiàn)用法,需要的朋友可以參考下
    2025-02-02
  • 詳解VSCode下C++環(huán)境配置過(guò)程

    詳解VSCode下C++環(huán)境配置過(guò)程

    這篇文章主要介紹了VSCode C++環(huán)境配置過(guò)程,在這大家需要在代碼的目錄下的.vscode文件夾下創(chuàng)建launch.json、tasks.json,具體實(shí)現(xiàn)過(guò)程跟隨小編一起看看吧
    2021-11-11
  • C++實(shí)現(xiàn)LeetCode(122.買(mǎi)股票的最佳時(shí)間之二)

    C++實(shí)現(xiàn)LeetCode(122.買(mǎi)股票的最佳時(shí)間之二)

    這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(122.買(mǎi)股票的最佳時(shí)間之二),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • Qt 中集成mqtt協(xié)議的使用方法

    Qt 中集成mqtt協(xié)議的使用方法

    文章介紹了如何在工程中引入qmqtt庫(kù),并通過(guò)聲明一個(gè)單例類(lèi)來(lái)暴露訂閱到的主題數(shù)據(jù),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧
    2025-02-02
  • c++歸并排序詳解

    c++歸并排序詳解

    歸并排序遵循分治法的思想:將原問(wèn)題分解為幾個(gè)規(guī)模較小但類(lèi)似于原問(wèn)題的子問(wèn)題,遞歸地求解這些子問(wèn)題,然后再合并這些子問(wèn)題的解來(lái)建立原問(wèn)題的解。分治模式在每層遞歸時(shí)都有三個(gè)步驟:分解、解決、合并。歸并排序完全遵循該模式。
    2017-05-05
  • 去掉vs2010中ipch文件和.sdf文件的解決方法

    去掉vs2010中ipch文件和.sdf文件的解決方法

    本篇文章介紹了,在vs2010中產(chǎn)生的ipch文件和.sdf文件的解決方法。需要的朋友參考下
    2013-05-05
  • C語(yǔ)言實(shí)現(xiàn)清空指定文件夾中所有文件的方法

    C語(yǔ)言實(shí)現(xiàn)清空指定文件夾中所有文件的方法

    這篇文章主要介紹了C語(yǔ)言實(shí)現(xiàn)清空指定文件夾中所有文件的方法,實(shí)例分析了C語(yǔ)言實(shí)現(xiàn)文件刪除的相關(guān)技巧,需要的朋友可以參考下
    2015-06-06
  • C++數(shù)字三角形問(wèn)題與dp算法

    C++數(shù)字三角形問(wèn)題與dp算法

    這篇文章主要介紹了C++數(shù)字三角形問(wèn)題與dp算法的相關(guān)知識(shí),非常不錯(cuò),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下
    2018-09-09
  • C語(yǔ)言?xún)?nèi)存函數(shù)的實(shí)現(xiàn)示例

    C語(yǔ)言?xún)?nèi)存函數(shù)的實(shí)現(xiàn)示例

    本文主要介紹了C語(yǔ)言?xún)?nèi)存函數(shù)的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-08-08

最新評(píng)論

南安市| 鄂尔多斯市| 临潭县| 舟山市| 年辖:市辖区| 裕民县| 沐川县| 绥江县| 扶余县| 连平县| 基隆市| 宜宾县| 石景山区| 紫金县| 禄丰县| 黔南| 南岸区| 囊谦县| 那坡县| 千阳县| 朝阳区| 平山县| 湖州市| 南川市| 新龙县| 三台县| 石渠县| 洪雅县| 潜江市| 奎屯市| 五峰| 德清县| 余姚市| 泰来县| 安图县| 阿鲁科尔沁旗| 永仁县| 金川县| 枝江市| 睢宁县| 无极县|