轉載自 這裡
inline 這個關鍵字是使用在function前面. 而inline 所宣告的function並不會有程式本體, 而是像巨集(define)一樣 會直接展開到呼叫他的地方.
inline的優點 :
在類別(class)中 我們常需要使用一個function將一個變數傳出去 比方說 :
我們知道 function的呼叫 是非常花CPU時間的 而function裡面卻只有傳回一個數值而已. 這樣的動作 對於CPU的使用非常沒有效率 . 當然 我們可以將這個變數改成public 讓其他人直接來存取. 不過這是一個不好的寫法, 比較好的寫法是使用inline function 來解決這個問題. 經過inline所宣告的function會直接展開在程式碼內, 所編出來程式碼就會直接去存取那個參數 省略了呼叫function的時間浪費.
inline與#define的比較 :
inline 其實就是將一個function直接展開到程式碼內. 這樣的功能 透過巨集也可以達到 不過巨集跟inline還是有些差異的 :
如下所示 :
r1是使用巨集 他會將GetValue()展開到程式碼中三次 如此r1是將三次呼叫GetValue()的值相加
r2是使用inline function他只會呼叫GetValue()一次 之後便將這個值相加起來(三個相加).
inline的使用 :
inline的使用非常簡單 只需要在function宣告前加上inline即可(如前面範例所示). 另外 如果將function的內容直接寫在類別(class)宣告中的話 編譯器會直接把他當做inline. 例如 :
以上的GetValue()並沒有宣告成inline 但是編譯器還是會直接將他當作inline function!
inline的使用效益問題 :
最後 一個function是否要用inline來展開的決定權 還是在編譯器手上. 編譯器會自己評估 將這個function用inline來展開合不合效益, 如果說程式碼很長 使用inline並不能節省多少CPU時間 然後卻又被呼叫很多次. 編譯器會判斷不合效益 則會自動忽略掉inline.
補充說明 :
* C++ Gossip: 行內函式(Inline function)
inline 這個關鍵字是使用在function前面. 而inline 所宣告的function並不會有程式本體, 而是像巨集(define)一樣 會直接展開到呼叫他的地方.
inline的優點 :
在類別(class)中 我們常需要使用一個function將一個變數傳出去 比方說 :
- int CMyClass::GetValue()
- {
- return m_nValue;
- }
inline與#define的比較 :
inline 其實就是將一個function直接展開到程式碼內. 這樣的功能 透過巨集也可以達到 不過巨集跟inline還是有些差異的 :
如下所示 :
- #define D_TRIPLE(n) (n+n+n)
- int GetValue();
- inline int I_TRIPLE(int n)
- {
- return n+n+n;
- }
- void main()
- {
- int a = 1;
- int b = 1;
- int r1 = D_TRIPLE(GetValue());
- int r2 = I_TRIPLE(GetValue());
- }
r2是使用inline function他只會呼叫GetValue()一次 之後便將這個值相加起來(三個相加).
inline的使用 :
inline的使用非常簡單 只需要在function宣告前加上inline即可(如前面範例所示). 另外 如果將function的內容直接寫在類別(class)宣告中的話 編譯器會直接把他當做inline. 例如 :
- class CMyClass
- {
- int m_nValue;
- int GetValue()
- {
- return m_nValue;
- };
- }
inline的使用效益問題 :
最後 一個function是否要用inline來展開的決定權 還是在編譯器手上. 編譯器會自己評估 將這個function用inline來展開合不合效益, 如果說程式碼很長 使用inline並不能節省多少CPU時間 然後卻又被呼叫很多次. 編譯器會判斷不合效益 則會自動忽略掉inline.
補充說明 :
* C++ Gossip: 行內函式(Inline function)
This message was edited 3 times. Last update was at 16/02/2011 23:31:47
沒有留言:
張貼留言