理解內聯函數inline在C++中的用法--IT地帶
 首頁 新聞 安徽 體育 財經 黃梅 旅游 軍事 娛樂 法治 教育 伊人 健康
繁體中文
 IT 彩信 讀書 汽車 演藝 音樂 徽商 書庫 郵件 論壇 賀卡 相冊 交友
簡體中文
精彩圖庫 業界動態 觀察分析 手機數碼 電腦教室 軟件下載 游戲人間 本地市場
精彩推薦
v戴爾發布超低價筆記本 5999元衝擊市場
v盛大購新浪股票 陳天橋談盛大帝國開局戰
v聯想收購IBM PC業務通過美國政府批准
v好萊塢巨頭來華接洽 EVD有望獲千部影片發行權
v民建中央質疑電信收費 呼吁取消固話月租費
v專為巾幗准備 職業商場女性手機精選導購
v有多少機可以重來 2004年遺憾機型回顧
v肯定能讓人絕倒的《三國無雙》武將圖
v《帝國時代3》GDC精美游戲畫面全剖析
精彩圖片
  您當前的位置 :IT地帶 > 電腦教室 > 程序設計 正文
理解內聯函數inline在C++中的用法

中安網  2005-03-25 15:39

  天極yesky3月23日報道 在C++中,為了解決一些頻繁調用的小涵數大量消耗棧空間或者是叫棧內存的問題,特別的引入了inline修飾符,表示為內聯涵數。

  可能說到這裡,很多人還不明白什麼是棧空間,其實棧空間就是指放置程序的局部數據也就是函數內數據的內存空間,在系統下,棧空間是有限的,如果頻繁大量的使用就會造成因棧空間不足所造成的程序出錯的問題,涵數的死循環遞歸調用的最終結果就是導致棧內存空間枯竭。

  下面我們來看一個例子

  上面的例子就是標准的內聯涵數的用法,使用inline修飾帶來的好處我們表面看不出來,其實在內部的工作就是在每個for循環的內部所有調用dbtest(i)的地方都換成了(i%2>0)?"奇":"偶"這樣就避免了頻繁調用函數對棧內存重復開闢所帶來的消耗。

  說到這裡很多人可能會問,既然inline這麼好,還不如把所謂的函數都聲明成inline,嗯,這個問題是要注意的,inline的使用是有所限制的,inline只適合涵數體內代碼簡單的涵數使用,不能包含復雜的結構控制語句例如while、switch,並且內聯函數本身不能直接調用遞歸函數(自己內部還調用自己的函數)。

  說到這裡我們不得不說一下在c語言中廣泛被使用的#define語句,是的define的確也可以做到inline的這些工作,但是define是會產生副作用的,尤其是不同類型參數所導致的錯誤,由此可見inline有更強的約束性和能夠讓編譯器檢查出更多錯誤的特性,在c++中是不推薦使用define的。(文/管寧)

編輯: 丁毅
 ?【相 關 報 道】?
-水滴石穿C語言之代碼檢查工具   04-12-28 11:13
-教你怎樣輕松應付C語言考試   04-11-10 11:17
-水滴石穿C語言之指針、數組和函數   04-10-18 12:17
-水滴石穿C語言程序設計之正確使用const   04-09-17 12:21
-C語言筆試輕松過—也談二級C應試技巧   04-04-09 14:48
 

中國安徽在線網站(中安在線)版權所有 未經允許 請勿復制或鏡像
皖ICP證 030106號