C++: 內嵌函式

來源:互聯網
上載者:User

標籤:調用   問題   好的   方便   取消   替換   效率   比較   turn   

(1)什麼是內嵌函式?
內嵌函式是指那些定義在類體內的成員函數,即該函數的函數體放在類體內。

(2)為什麼要引入內嵌函式?
當然,引入內嵌函式的主要目的是:解決程式中函數調用的效率問題。另外,前面我們講到了宏,裡面有這麼一個例子:
#define ABS(x) ((x)>0? (x):-(x))
當++i出現時,宏就會歪曲我們的意思,換句話說就是:宏的定義很容易產生二意性。
  
我們可以看到宏有一些難以避免的問題,怎麼解決呢?前面我們已經儘力替換了。

下面我們用內嵌函式來解決這些問題。

(3)為什麼inline能取代宏?
1、 inline 定義的類的內嵌函式,函數的代碼被放入符號表中,在使用時直接進行替換,(像宏一樣展開),沒有了調用的開銷,效率也很高。 
2、 很明顯,類的內嵌函式也是一個真正的函數,編譯器在調用一個內嵌函式時,會首先檢查它的參數的類型,保證調用正確。然後進行一系列的相關檢查,就像對待任何一個真正的函數一樣。這樣就消除了它的隱患和局限性。
3、 inline 可以作為某個類的成員函數,當然就可以在其中使用所在類的保護成員及私人成員。

(4)內嵌函式和宏的區別?
內嵌函式和宏的區別在於,宏是由前置處理器對宏進行替代,而內嵌函式是通過編譯器控制來實現的。而且內嵌函式是真正的函數,只是在需要用到的時候,內嵌函式像宏一樣的展開,所以取消了函數的參數壓棧,減少了調用的開銷。你可以象調用函數一樣來調用內嵌函式,而不必擔心會產生於處理宏的一些問題。內嵌函式與帶參數的宏定義進行下比較,它們的代碼效率是一樣,但是內聯歡函數要優於宏定義,因為內嵌函式遵循的類型和範圍規則,它與一般函數更相近,在一些編譯器中,一旦關上內聯擴充,將與一般函數一樣進行調用,比較方便。 

(5)什麼時候用內嵌函式?
內嵌函式在C++類中,應用最廣的,應該是用來定義存取函數。我們定義的類中一般會把資料成員定義成私人的或者保護的,這樣,外界就不能直接讀寫我們類成員的資料了。對於私人或者保護成員的讀寫就必須使用成員介面函數來進行。如果我們把這些讀寫成
員函數定義成內嵌函式的話,將會獲得比較好的效率。
Class A
{
Private:
int nTest;
 Public:
int readtest() { return nTest;}
void settest(int I) { nTest=I; }
}

(6)如何使用內嵌函式?
我們可以用inline來定義內嵌函式。
inline int A (int x) { return 2*x; }
不過,任何在類的說明部分定義的函數都會被自動的認為是內嵌函式。

(7)內嵌函式的優缺點?
我們可以把它作為一般的函數一樣調用,但是由於內嵌函式在需要的時候,會像宏一樣展開,所以執行速度確比一般函數的執行速度要快。當然,內嵌函式也有一定的局限性。就是函數中的執行代碼不能太多了,如果,內嵌函式的函數體過大,一般的編譯器會放棄內聯方式,而採用普通的方式調用函數。(換句話說就是,你使用內嵌函式,只不過是向編譯器提出一個申請,編譯器可以拒絕你的申請)這樣,內嵌函式就和普通函數執行效率一樣了。

(8)如何禁止函數進行內聯?
如果使用VC++,可以使用/Ob命令列參數。當然,也可以在程式中使用 #pragma auto_inline達到相同的目的。

(9)注意事項:
1.在內嵌函式內不允許用迴圈語句和開關語句。
2.內嵌函式的定義必須出現在內嵌函式第一次被調用之前。

C++: 內嵌函式

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.