內聯函數和外聯函數
類的成員函數能夠分爲內聯函數和外聯函數。內聯函數是指那些定義在類體內的成員函數,即該函數的函數體放在類體內。而說明在類體內,定義在類體外的成員函數叫外聯函數。外聯函數的函數體在類的實現部分。
內聯函數在調用時不是像通常的函數那樣要轉去執行被調用函數的函數體,執行完成後再轉回調用函數中,執行其後語句,而是在調用函數處用內聯函數體的代碼來替換,這樣將會節省調用開銷,提升運行速度。
內聯函數與前面講過的帶參數的宏定義進行一下比較,它們的代碼效率是同樣的,可是內聯函數要優於宏定義,由於內聯函數遵循函數的類型和做用域規則,它與通常函數更相近,在一些編譯器中,一旦關上內聯擴展,將與通常函數同樣進行調用,調試比較方便。
外聯函數變成內聯函數的方法很簡單,只要在函數頭前面加上關鍵字inline就能夠了。
- #include <iostream>
- using namespace std;
- class A
- {
- public:
- A(int x, int y)
- {
- X=x;Y=y;
- }
- int a()
- {
- return X;
- }
- int b()
- {
- return Y;
- }
- int c();
- int d();
- private:
- int X,Y;
- };
-
- inline int A::c()
- {
- return a()+b();
- }
- inline int A::d()
- {
- return c();
- }
-
- void main()
- {
- A m(3,5);
- int I=m.d();
- cout<<"d()return:"<<I<<endl;
- }
輸出結果:
d()return:8
說明:類A中,直接定義了3個內聯函數,又使用inline定義了2個內聯函數。
Note:
1.在內聯函數內不容許用for循環語句和switch開關語句。
2.內聯函數的定義必須出如今內聯函數第一次被調用以前。
3.在一個文件中定義的內聯函數不能在另外一個文件中使用。它們一般放在頭文件中共享。
4.類內部保護或是私有取值成員函數,設定爲inline函數能夠提升程序的執行效率。
5.能夠在程序中使用 #pragma auto_inline達到禁止函數進行內聯