国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

理解內聯函數inline在C++中的用法

2019-11-17 05:17:07
字體:
來源:轉載
供稿:網友

  在C++中,為了解決一些頻繁調用的小涵數大量消耗棧空間或者是叫棧內存的問題,非凡的引入了inline修飾符,表示為內聯涵數。

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

  下面我們來看一個例子

 C++ 代碼  
//程序作者:管寧 
//站點:www.cndev-lab.com 
//所有稿件均有版權,如要轉載,請務必聞名出處和作者 
 
#include <iostream> 
#include <string> 
using namespace std; 
 
inline string dBTest(int a); //函數原形聲明為inline即:內聯涵數 
 
 
void main() 
{ 
 for (int i=1;i<=10;i++) 
 { 
  cout << i << ":" << dbtest(i) << endl; 
 } 
 cin.get(); 
} 
 
string dbtest(int a)//這里不用再次inline,當然加上inline也是不會出錯的 
{ 
 return (a%2>0)?"奇":"偶"; 
} 
  上面的例子就是標準的內聯涵數的用法,使用inline修飾帶來的好處我們表面看不出來,其實在內部的工作就是在每個for循環的內部所有調用dbtest(i)的地方都換成了(i%2>0)?"奇":"偶"這樣就避免了頻繁調用函數對棧內存重復開辟所帶來的消耗。

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

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 都昌县| 获嘉县| 剑阁县| 乳源| 福贡县| 闻喜县| 文安县| 通许县| 宁南县| 弥渡县| 乡城县| 宣汉县| 大埔县| 曲靖市| 浦城县| 普洱| 武宣县| 锡林郭勒盟| 隆子县| 翁牛特旗| 株洲市| 涿州市| 密山市| 博白县| 甘洛县| 温宿县| 贵南县| 昌宁县| 上虞市| 惠安县| 绩溪县| 嘉定区| 北票市| 谢通门县| 奉化市| 雷波县| 高台县| 昔阳县| 长子县| 丘北县| 驻马店市|