1. 程式人生 > >C++類成員函式在.cpp中設定成inline後無法解析的問題

C++類成員函式在.cpp中設定成inline後無法解析的問題

行內函數:告知編譯器在進行有內聯標識的函式呼叫時將函式體部分在呼叫處展開。這樣做可以消除函式傳參(堆疊呼叫)的負擔,提高了函式的呼叫效率。

而且inlining的函式並不存在,因為已經被展開了。

如果需要定義一個行內函數,需要在函式體定義的地方使用inline關鍵字標識,寫在函式宣告處是沒有意義的。

int func(int);  //函式宣告


inline int func(int a)  //函式定義
{ 
    return ++a;
}



int main()
{
   std::cout << func(1) << endl;  //函式呼叫
   return 0;
}

會被展開成
int main()
{
  std::cout << ++1 << endl;
  return 0;
}

消除了引數a的傳遞過程帶來的效率問題。

1.在C++類的實現過程中,如果想要將成員函式設定成inline行內函數的話,需要在類的標頭檔案.h中定義這個函式,不能在相應的.cpp檔案中定義。

2.在類內部定義的成員函式預設設定成行內函數。

3.inline內聯關鍵字只是給編譯器一個建議,有些函式即使有inline標識,也不會被設定成行內函數。

4.有些函式即使沒有inline標識,編譯器在優化時也有可能將這個函式作為行內函數來處理。