天天看點

c++: inline_函數與内聯函數(超詳細)c++: inline_函數與内聯函數

c++: inline_函數與内聯函數

函數: 函數是指一段可以直接被另一段程式或代碼引用的程式或代碼。

函數作用: 通過将某些功能性子產品編寫成函數, 可以在很多情況下減少重複編寫程式段的工作

進而提高編寫代碼的效率, 同時還能提高代碼的可讀性, 便于程式多人開發

c/c++ 函數定義:
傳回類型 名字(形式參數清單){
    函數體語句...
    return 表達式;
}           

複制

c/c++ 函數調用:
名字(實際參數清單);           

複制

但是在函數帶來很多便利的同時, 也一定有某些負作用的産生:

通過解析函數在記憶體中的運作原理來了解函數的負作用:

普通函數:

c++: inline_函數與内聯函數(超詳細)c++: inline_函數與内聯函數

通過上圖可以了解到函數的使用會消耗時間, 而當今時代對代碼時間的要求越來越高, 空間的需求漸漸減小

那麼我們是否可以通過某種方式将函數調用的時間消耗轉變為空間消耗呢?

那就是内聯函數:

c++: inline_函數與内聯函數(超詳細)c++: inline_函數與内聯函數

c++内聯函數實作:

#include 
using namespace std;

inline int fun(int a, int b){
    return a + b;
}

int main(){
    int m, n;
    cin >> m >> n;
    cout << fun(m, n);
}           

複制

這是一個很簡單的求和内聯函數,

内聯函數是函數的一種,在c++中隻需要在函數定義前加上inline即可;

總結:

1. 内聯函數是一個特殊的函數, 調用與普通函數一緻;
2. 内聯函數通過記憶體膨脹來減少函數的跳轉
3. 函數體代碼過長, 或函數體中有循環, 不建議使用内聯
4. 函數體是簡單的指派語句或者傳回語句, 而且使用頻率高, 建議使用内聯           

複制

注:

内聯函數在這裡類似宏替換, 但他們是有差別的, 内聯函數是一個函數, 是在程式執行期間運作的, 沒有函數的入棧和出棧, 宏替換是預處理階段執行的, 本質是替換, 内聯函數有形參類型, 有傳回值類型和傳回值, 帶參數的形參是沒有類型, 沒有傳回值類型也沒有傳回值