亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

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

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

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

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

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

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

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

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

示例代碼:

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

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

inline是以代碼的膨脹(復(fù)制)為待見的,僅僅省去了函數(shù)調(diào)用的開銷,從而提高了函數(shù)的執(zhí)行效率。如果,執(zhí)行函數(shù)體內(nèi)代碼的時(shí)間相比于函數(shù)調(dià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)用的開銷大。
另外,類的構(gòu)造函數(shù)和析構(gòu)函數(shù)容易讓人誤解成使用inline更有效。要當(dāng)心構(gòu)造函數(shù)和析構(gòu)函數(shù)可能會(huì)隱藏一些行為,如“偷偷地執(zhí)行基類或成員對(duì)象的構(gòu)造函數(shù)和析構(gòu)函數(shù)?!?br /> 一個(gè)好的編譯器會(huì)根據(jù)函數(shù)體,自動(dòng)取消不適合的inline函數(shù)。(說明了,inline不應(yīng)該出現(xiàn)在類的內(nèi)部,及函數(shù)的聲明的部分)

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

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

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

相關(guān)文章

  • C++遞歸算法實(shí)例代碼

    C++遞歸算法實(shí)例代碼

    這篇文章主要介紹了C++遞歸算法實(shí)例代碼,還是比較不錯(cuò)的,運(yùn)用了遞歸算法解決相關(guān)問題,這里分享給大家,需要的朋友可以參考下。
    2017-11-11
  • c++ minicsv庫的編譯錯(cuò)誤與解決方案

    c++ minicsv庫的編譯錯(cuò)誤與解決方案

    有一個(gè)項(xiàng)目需要寫csv文件以呈現(xiàn)數(shù)據(jù)。Github上有一個(gè)關(guān)于csv的輕量級(jí)讀寫庫minicsv,于是下載之。但是編譯example時(shí)出現(xiàn)了以下問題
    2016-11-11
  • C++中引用傳遞與指針傳遞的區(qū)別(面試常見)

    C++中引用傳遞與指針傳遞的區(qū)別(面試常見)

    這篇文章主要介紹了C++中引用傳遞與指針傳遞的區(qū)別(面試常見),需要的朋友可以參考下
    2018-03-03
  • C++中的std::initializer_list使用解讀

    C++中的std::initializer_list使用解讀

    這篇文章主要介紹了C++中的std::initializer_list使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • C語言超詳細(xì)講解宏與指針的使用

    C語言超詳細(xì)講解宏與指針的使用

    宏定義是用宏名來表示一個(gè)字符串,在宏展開時(shí)又以該字符串取代宏名,這只是一種簡單的替換。要想突破C語言的學(xué)習(xí),對(duì)指針的掌握是非常重要的,本文將具體針對(duì)宏與指針的基礎(chǔ)做詳盡的介紹
    2022-06-06
  • Linux下C語言的fork()子進(jìn)程函數(shù)用法及相關(guān)問題解析

    Linux下C語言的fork()子進(jìn)程函數(shù)用法及相關(guān)問題解析

    fork()函數(shù)在Linux下可以用于產(chǎn)生一個(gè)子進(jìn)程,這里我們挑選了兩個(gè)fork相關(guān)的面試題,來看一下Linux下C語言的fork()子進(jìn)程函數(shù)用法及相關(guān)問題解析
    2016-06-06
  • VC++角色游戲中的人物初始化模塊代碼實(shí)例

    VC++角色游戲中的人物初始化模塊代碼實(shí)例

    這篇文章主要介紹了VC++角色游戲中的人物初始化模塊,對(duì)大家學(xué)習(xí)VC++有一定的幫助,需要的朋友可以參考下
    2014-08-08
  • C++ GetDlgItem用法案例詳解

    C++ GetDlgItem用法案例詳解

    這篇文章主要介紹了C++ GetDlgItem用法案例詳解,本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • Qt中簡單的按鈕槽函數(shù)傳遞參數(shù)方法

    Qt中簡單的按鈕槽函數(shù)傳遞參數(shù)方法

    這篇文章主要介紹了Qt中簡單的按鈕槽函數(shù)傳遞參數(shù)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • C/C++練習(xí)題之合并k個(gè)已排序的鏈表

    C/C++練習(xí)題之合并k個(gè)已排序的鏈表

    這篇文章主要給大家介紹了關(guān)于C/C++練習(xí)題之合并k個(gè)已排序的鏈表的相關(guān)資料,文中通過圖文以及實(shí)例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用C/C++具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2023-06-06

最新評(píng)論