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

c++中inline的用法分析

 更新時間:2013年05月23日 17:04:59   作者:  
本篇文章是對c++中inline的用法進行了詳細的分析介紹,需要的朋友參考下

在函數(shù)聲明或定義中函數(shù)返回類型前加上關鍵字inline即把min()指定為內(nèi)聯(lián)。
inline int min(int first, int secend) {/****/};
inline函數(shù)對編譯器而言必須是可見的,以便它能夠在調(diào)用點內(nèi)展開該函數(shù)。與非inline
函數(shù)不同的是,inline函數(shù)必須在調(diào)用該函數(shù)的每個文本文件中定義。當然,對于同一程序
的不同文件,如果inline函數(shù)出現(xiàn)的話,其定義必須相同。對于由兩個文件compute.C和draw.C構成的程序來說,程序員不能定義這樣的min()函數(shù),它在compute.C中指一件事情,
而在draw.C中指另外一件事情。如果兩個定義不相同,程序?qū)形炊x的行為:

為保證不會發(fā)生這樣的事情,建議把inline函數(shù)的定義放到頭文件中。在每個調(diào)用該inline函數(shù)的
文件中包含該頭文件。這種方法保證對每個inline函數(shù)只有一個定義,且程序員無需復制代碼,并且
不可能在程序的生命期中引起無意的不匹配的事情。
(二)內(nèi)聯(lián)函數(shù)的編程風格(摘自高質(zhì)量C++/C 編程指南)
關鍵字inline 必須與函數(shù)定義體放在一起才能使函數(shù)成為內(nèi)聯(lián),僅將inline 放在函數(shù)聲明前面不起任何作用。
如下風格的函數(shù)Foo 不能成為內(nèi)聯(lián)函數(shù):

復制代碼 代碼如下:

inline void Foo(int x, int y); // inline 僅與函數(shù)聲明放在一起
int main() {

}
void Foo(int x, int y)
{
}

而如下風格的函數(shù)Foo 則成為內(nèi)聯(lián)函數(shù):
復制代碼 代碼如下:

void Foo(int x, int y)
int main() {

}
inline void Foo(int x, int y) // inline 與函數(shù)定義體放在一起
{
}

所以說,inline 是一種“用于實現(xiàn)的關鍵字”,而不是一種“用于聲明的關鍵字”。
一般地,用戶可以閱讀函數(shù)的聲明,但是看不到函數(shù)的定義。盡管在大多數(shù)教科書中內(nèi)
聯(lián)函數(shù)的聲明、定義體前面都加了inline 關鍵字,但我認為inline 不應該出現(xiàn)在函數(shù)
的聲明中。這個細節(jié)雖然不會影響函數(shù)的功能,但是體現(xiàn)了高質(zhì)量C++/C 程序設計風格
的一個基本原則:聲明與定義不可混為一談,用戶沒有必要、也不應該知道函數(shù)是否需
要內(nèi)聯(lián)。
定義在類聲明之中的成員函數(shù)將自動地成為內(nèi)聯(lián)函數(shù),例如
復制代碼 代碼如下:

class A
{
public:
void Foo(int x, int y) { } // 自動地成為內(nèi)聯(lián)函數(shù)
}

將成員函數(shù)的定義體放在類聲明之中雖然能帶來書寫上的方便,但不是一種良好的編程
風格,上例應該改成:
復制代碼 代碼如下:

// 頭文件
class A
{
public:
void Foo(int x, int y);
}
// 定義文件
inline void A::Foo(int x, int y)
{
}

慎用內(nèi)聯(lián)
內(nèi)聯(lián)能提高函數(shù)的執(zhí)行效率,為什么不把所有的函數(shù)都定義成內(nèi)聯(lián)函數(shù)?
如果所有的函數(shù)都是內(nèi)聯(lián)函數(shù),還用得著“內(nèi)聯(lián)”這個關鍵字嗎?
內(nèi)聯(lián)是以代碼膨脹(復制)為代價,僅僅省去了函數(shù)調(diào)用的開銷,從而提高函數(shù)的
執(zhí)行效率。如果執(zhí)行函數(shù)體內(nèi)代碼的時間,相比于函數(shù)調(diào)用的開銷較大,那么效率的收
獲會很少。另一方面,每一處內(nèi)聯(lián)函數(shù)的調(diào)用都要復制代碼,將使程序的總代碼量增大,
消耗更多的內(nèi)存空間。以下情況不宜使用內(nèi)聯(lián):
(1)如果函數(shù)體內(nèi)的代碼比較長,使用內(nèi)聯(lián)將導致內(nèi)存消耗代價較高。
(2)如果函數(shù)體內(nèi)出現(xiàn)循環(huán),那么執(zhí)行函數(shù)體內(nèi)代碼的時間要比函數(shù)調(diào)用的開銷大。
類的構造函數(shù)和析構函數(shù)容易讓人誤解成使用內(nèi)聯(lián)更有效。要當心構造函數(shù)和析構
函數(shù)可能會隱藏一些行為,如“偷偷地”執(zhí)行了基類或成員對象的構造函數(shù)和析構函數(shù)。
所以不要隨便地將構造函數(shù)和析構函數(shù)的定義體放在類聲明中。
一個好的編譯器將會根據(jù)函數(shù)的定義體,自動地取消不值得的內(nèi)聯(lián)(這進一步說明
了inline 不應該出現(xiàn)在函數(shù)的聲明中)。

相關文章

  • c++實現(xiàn)廣播通訊詳解

    c++實現(xiàn)廣播通訊詳解

    這篇文章主要為大家詳細介紹了c++實現(xiàn)廣播通訊的相關知識,文中的示例代碼講解詳細,具有一定的借鑒價值,有需要的小伙伴可以參考一下
    2024-12-12
  • C語言文件操作詳情(二)

    C語言文件操作詳情(二)

    這篇文章主要介紹了C語言文件操作詳情,文章基于上一篇文章的內(nèi)容繼續(xù)展開C語言文件操作的相關詳情,需要的小伙伴可以參考一下
    2022-04-04
  • C++ ostream用法案例詳解

    C++ ostream用法案例詳解

    這篇文章主要介紹了C++ ostream用法案例詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • C語言實現(xiàn)數(shù)字游戲

    C語言實現(xiàn)數(shù)字游戲

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)數(shù)字游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-01-01
  • C語言中的strlen()和sizeof()對比分析

    C語言中的strlen()和sizeof()對比分析

    這篇文章主要介紹了C語言中的strlen()和sizeof()區(qū)別對比,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-03-03
  • Linux頁面置換算法的C語言實現(xiàn)

    Linux頁面置換算法的C語言實現(xiàn)

    這篇文章主要為大家詳細介紹了Linux頁面置換算法的C語言實現(xiàn),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • VSCode?IDE?配置環(huán)境過程解析

    VSCode?IDE?配置環(huán)境過程解析

    這篇文章主要介紹了VSCode?IDE?環(huán)境配置,這里說的是僅使用?VSCode?創(chuàng)建C/CPP項目時的配置,VSCode?有代碼提示,?定位來源和各種快捷鍵,?更適合日常編碼工作,需要的朋友可以參考下
    2022-02-02
  • C語言編程之掃雷小游戲空白展開算法優(yōu)化

    C語言編程之掃雷小游戲空白展開算法優(yōu)化

    掃雷是電腦上很經(jīng)典的游戲,特意去網(wǎng)上玩了一會,幾次調(diào)試之后,發(fā)現(xiàn)這個比三子棋要復雜一些,尤其是空白展開算法上和堵截玩家有的一拼,與實際游戲差別較大,不能使用光標,下面來詳解每一步分析
    2021-09-09
  • C語言中的二叉樹和堆詳解

    C語言中的二叉樹和堆詳解

    這篇文章主要介紹了C語言中的二叉樹和堆詳解,樹是一種非線性的數(shù)據(jù)結構,它是由n(n>=0)個有限結點組成一個具有層次關系的集合,把它叫做樹是因為它看起來像一棵倒掛的樹,也就是說它是根朝上,而葉朝下的,需要的朋友可以參考下
    2023-07-07
  • C++實現(xiàn)簡易通訊錄功能

    C++實現(xiàn)簡易通訊錄功能

    這篇文章主要為大家詳細介紹了C++實現(xiàn)簡易通訊錄功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06

最新評論

隆德县| 腾冲县| 巢湖市| 陕西省| 陈巴尔虎旗| 丰顺县| 莱州市| 泾源县| 望城县| 当阳市| 曲沃县| 龙门县| 达拉特旗| 甘德县| 建德市| 西贡区| 上蔡县| 黄龙县| 东乡县| 鹤庆县| 七台河市| 康保县| 南京市| 佛冈县| 康马县| 巴彦淖尔市| 泰安市| 保康县| 安丘市| 合山市| 曲阜市| 新昌县| 巢湖市| 图片| 北流市| 星子县| 农安县| 华阴市| 辰溪县| 陈巴尔虎旗| 青河县|