C/C++ inline 函式

gaopengtttt發表於2016-06-01


C/C++中包含了一類inline函式,其只是單純在原本函式申明或者定義前面多了一個inline
但是帶來含義的確實不一樣的。
如果不帶inline那麼主函式執行到函式入口處會跳到相應的函式程式碼除繼續執行,在記憶體
中的程式碼段記憶體中這些程式碼不是連續的,這樣肯能帶來一些時間損耗
如果加入inline後函式會copy一份到主函式中,這樣佔用一定的記憶體但是不會jump(應該彙編使用的jump指令)


那麼這樣一來,可能inline函式適用的範圍為函式程式碼本身程式碼量很少,而且執行非常快。
如果程式碼量大那麼COPY佔用的記憶體過多,如果執行非常慢,減少JUMP帶來的提升只是
微不足道的提升,下面演示他的使用
  
  
  以下的列子為了展示3個問題
  1、inline function 申明
  2、使用typedef 定義一個函式指標的別名,並且使用它來宣告一個f_p的變數接受add的地址
  3、函式返回的const型別的指標必須和在主函式中使用const int *接受
  
  1 /*************************************************************************
  2     > File Name: inline.cpp
  3     > Author: gaopeng
  4     > Mail: gaopp_200217@163.com 
  5     > Created Time: Thu 26 May 2016 09:45:18 PM CST
  6  ************************************************************************/
  7 
  8 #include
  9 
 10 typedef  const int* (*Fun_p)(const int *input);//typedef define a Fun_p alias to a function pointer 
 11 using namespace std;
 12 
 13 inline const int * add(const  int *input);
 14 int main(void)
 15 {
 16     int input = 2;
 17     const int *re;
 18     Fun_p  f_p = add;
 19     re = f_p(&input);
 20     cout<< *re <<endl;
 21 
 22 }
 23 
 24 
 25 
 26 inline const int * add(const  int *input)
 27 {   
 28     static int addva; 
 29     addva = *input+*input;
 30     return &addva;
 31 
 32 }         
</endl;

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7728585/viewspace-2112427/,如需轉載,請註明出處,否則將追究法律責任。

相關文章