日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++之内联函数

發布時間:2023/12/19 c/c++ 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++之内联函数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

內聯函數是一種特殊的函數,具有普通函數的特征(參數檢查,返回類型等)
內聯函數是對編譯器的一種請求,因此編譯器可能拒絕這種請求
內聯函數由 編譯器處理,直接將編譯后的函數體插入調用的地方
宏代碼片段 由預處理器處理, 進行簡單的文本替換,沒有任何編譯過程
注:內聯函數聲明時inline關鍵字必須和函數定義結合在一起,否則編譯器會直接忽略內聯請求。

C++中內聯編譯的限制:
不能存在任何形式的循環語句
不能存在過多的條件判斷語句
函數體不能過于龐大
不能對函數進行取址操作
函數內聯聲明必須在調用語句之前

編譯器對于內聯函數的限制并不是絕對的,內聯函數相對于普通函數的優勢只是省去了函數調用時壓棧,跳轉和返回的開銷。

因此,當函數體的執行開銷遠大于壓棧,跳轉和返回所用的開銷時,那么內聯將無意義

#include <stdio.h>#define MAX(a, b) f((a) > (b) ? (a) : (b)) void f (int max) {printf ("max = %d\n", max); }// 內聯函數代替宏函數 // 在普通函數前加 關鍵字 inline 將函數變成內聯函數 // inline 必須要和函數定義放一起,如果和函數聲明放一起會被忽略 // define 是預處理器處理的 inline 是編譯器處理的 // define 沒有函數參數檢測,返回檢測,作用域檢測,inline 工作方式像一個函數 // 所以會有參數類型檢測等 // inline是向請求在調用該函數的時候進行函數體的替換,編譯器可能拒絕內聯請求 // 如果內聯成功,編譯完以后代碼是沒有這一段函數的// 內聯函數函數體不能過長,最好不要超過 5 行 // 不能有循環語句,復雜的 if 語句 // 不能對內聯函數進行取地址操作 inline int max(int a, int b) {return (a>b ? a : b); }int main7_2() {int a = 10;int b = 20;f(10);f (max(a, b++));printf ("b = %d\n", b);return 0; }int main7_1() {int a = 10;int b = 20;MAX(a, b++); // f((a) > (b++) ? (a) : (b++))printf ("b = %d\n", b);return 0; }

總結

以上是生活随笔為你收集整理的C++之内联函数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。