用法
1.c++中被inline函式修飾的函式,稱為內聯函式;
2.inline應該與函式的定義體放在一起;
//inline與函式宣告放在一起,不能成為內聯函式
inline
void
fun(
int x,
int y)
;void fun (
int x,
int y)
//inline與函式定義體放在一起,可以成為內聯函式
void fun (
int x,
int y)
;inline fun (
int x,
int y)
3.宣告與定義應該在同乙個編譯模組下;
宣告與定義若不在同乙個檔案中,在編譯時,inline函式被展開,鏈結時就找不到這個函式了,會報鏈結錯誤,可以將內聯函式的宣告和定義都放在標頭檔案中,才可以在呼叫時展開。
4.內聯函式是一種空間換時間的做法,對於**很長、含有迴圈/遞迴的函式,不適用內聯函式;
5.inline只是對編譯器的建議,對於使用inline宣告,但函式內包含迴圈/遞迴的函式,編譯器會自動優化忽略;
6. 編譯器合成的預設建構函式、拷貝建構函式、析構函式以及賦值運算子一般都會被內聯化;
優點理解函式呼叫原理:
執行記憶體中的**——執行到函式呼叫指令——儲存當前指令的位址——將需要的函式引數複製到堆疊——跳轉到呼叫函式的記憶體位址,並執行——將返回值放入暫存器——跳回之前的函式位址
1.內聯函式在編譯時展開,在內聯函式的呼叫位置,用源**進行替換,節省了函式呼叫的開銷,加快執行速度;
2.相比於巨集,巨集在預處理階段展開,沒有型別檢查,內聯函式在編譯階段展開,具有引數檢查,安全性更高;
缺點1.誤用會造成**膨脹,一般內聯函式應該在1~5行;
2.函式中有遞迴的函式,在內聯時會造成無限遞迴;
3.內聯函式中不能包含複雜的結構控制語句(遞迴、迴圈、switch);
巨集的優缺點
優點:
1.增強**的復用性。
2.提高效能。
缺點:
1.不方便除錯巨集。(因為預編譯階段進行了替換)
2.**可讀性差,可維護性差,容易誤用。
3.沒有型別安全的檢查 。
c++有哪些技術可以代替巨集
常量定義 換用const
函式定義 換用內聯函式,代替c語言中表示式形式的巨集定義來解決程式中函式呼叫的效率問題。
C 內聯函式
1 什麼是內聯函式?內聯函式就是小型函式,犧牲空間來節省函式呼叫的開銷,一般用作比較小的函式,即函式內部沒有迴圈 開關語句等。內聯函式被發明出來就是為了取代c中的巨集,因為巨集是單純的替換而沒有型別檢查所以經常出毛病,2 為什麼要引入內聯函式?當然,引入內聯函式的主要目的是 解決程式中函式呼叫的效率...
C 內聯函式
1 什麼是內聯函式?2 為什麼要引入內聯函式?3 為什麼inline能取代巨集?4 內聯函式和巨集的區別?5 什麼時候用內聯函式?6 如何使用內聯函式?7 內聯函式的優缺點?8 如何禁止函式進行內聯?9 注意事項 1 什麼是內聯函式?內聯函式是指那些定義在類體內的成員函式,即該函式的函式體放在類體內...
c 內聯函式
1 什麼是內聯函式?內聯函式是指那些定義在類體內的成員函式,即該函式的函式體放在類體內。2 為什麼要引入內聯函式?當然,引入內聯函式的主要目的是 解決程式中函式呼叫的效率問題。另外,前面我們講到了巨集,裡面有這麼乙個例子 define abs x x 0?x x 當 i出現時,巨集就會歪曲我們的意思...