1. 程式人生 > >C++_inline行內函數

C++_inline行內函數

inline行內函數可以實現在呼叫函式的地方拷貝程式碼副本,從而避免了函式呼叫跳轉等存在的時間上耗時稍長的問題。

(inline 要寫在函式 定義 與 宣告 之前,如 inline double square(double);   

  inline double square(double x){return x*x;})

行內函數的使用前提:

1.程式碼段比較小

2.且函式呼叫頻繁的程式碼可以使用行內函數,行內函數安全性比巨集函式更好

不會出現語義上的問題,而巨集函式會出現語義上的問題(尤其對於自增運算子):詳見我的博文

傳送門:http://blog.csdn.net/u010003835/article/details/47394867

例如#define SQUARE(x)  ((x)*(x))

當呼叫SQUARE(++C) 得到結果為49

呼叫前C等於5,呼叫後C等於7,與語義違背。 

但是行內函數也存在一些問題:

例如行內函數要進行函式的型別宣告與引數型別的宣告,可能要重寫多個行內函數。

注意:遞迴呼叫的函式不應宣告為行內函數。

行內函數不要呼叫自身,可以通過編譯。但這樣由於函式複製會導致(程式碼的隱含長度大大增長)不值得這麼做。

行內函數如何使用:

1.inline要加在函式宣告的前面。

2.inline要加在函式定義的前面.

示例:

#include <iostream>

using namespace std;

#define SQUARE(X) ((X)*(X))

inline int fabs(int i);
inline double square(double x){ return x*x; }


int main(){


	int a = 5;
	/*
	cout << SQUARE(3.5 + 1.5) << endl;
	cout << SQUARE(a++) << endl;
	cout << a << endl;
	*/

	cout << fabs(10) << endl;

	cout << square(++a) << endl;
	cout << a << endl;

	return 0;
}




fabs雖然定義為了行內函數且通過了編譯可以執行,但是inline由於進行的是函式體的複製,會導致程式碼長度大大增加,
所以不應將遞迴呼叫的函式宣告為行內函數。