【C/C++】inline關鍵詞

C++ inline 關鍵字學習筆記

一、什么是 inline 函數?

inline(內聯)是 C++ 中的一個關鍵字,表示“將函數的代碼直接插入到調用點”,以減少函數調用開銷,提升執行效率。

? 注意:inline 是一種“請求”,編譯器不一定會采納它。


二、為什么使用 inline

通常,函數調用會有如下流程:

  • 參數壓棧
  • 跳轉到函數地址
  • 執行函數體
  • 返回并恢復現場

這個過程有一定的性能開銷。對于體積小、調用頻繁的函數,可以使用 inline 來減少這些開銷。


三、如何使用 inline

? 語法格式:

inline 返回類型 函數名(參數) {// 函數體
}

四、代碼示例

🔹 示例一:普通函數

int add(int a, int b) {return a + b;
}int main() {int result = add(1, 2);  // 正常函數調用,有開銷
}

🔹 示例二:inline 函數

inline int add(int a, int b) {return a + b;
}int main() {int result = add(1, 2);  // 編譯器可能會將調用展開為 int result = 1 + 2;
}
  • 優勢:省去了函數調用的跳轉和返回,提升性能。
  • 缺點:如果函數體太大、頻繁展開,會增加可執行文件體積(代碼膨脹)。

五、適合使用 inline 的場景

適合用 inline 的情況不適合用 inline 的情況
函數體非常小函數體很大
調用頻繁很少調用
希望去除調用開銷對性能影響不大
函數定義通常寫在頭文件中函數定義隱藏在源文件中

六、常見應用

🔸 頭文件中定義的函數默認建議加 inline

// math_utils.hpp
#pragma onceinline int square(int x) {return x * x;
}

如果你不加 inline,多處包含這個頭文件時,會造成鏈接錯誤(重復定義)。


七、與宏的對比

#define ADD(a, b) ((a) + (b))     // 宏inline int add(int a, int b) {   // inline 函數return a + b;
}
  • 宏沒有類型檢查、可能有副作用
  • inline 函數安全、可調試、有作用域

? 結論:inline 更推薦使用!


八、總結

項目說明
作用減少函數調用開銷,將函數體插入到調用點
使用場景函數體小、調用頻繁、在頭文件中定義
注意事項編譯器不一定接受;不要濫用大型函數內聯
替代宏inline 比宏更安全,推薦使用

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/78527.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/78527.shtml
英文地址,請注明出處:http://en.pswp.cn/web/78527.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

React useMemo函數

第一個參數是回調函數,返回計算的結果,第二個參數是依賴項,該函數只監聽count1變量的變化 import { useReducer, useState } from react; import ./App.css;// 定義一個Reducer函數 根據不同的action進行不同的狀態修改 function reducer(st…

對比測評:為什么AI編程工具需要 Rules 能力?

通義靈碼 Project Rules 在開始體驗通義靈碼 Project Rules 之前,我們先來簡單了解一下什么是通義靈碼 Project Rules? 大家都知道,在使用 AI 代碼助手的時候,有時候生成的代碼不是自己想要的,或者說生成的代碼采納后…

Java學習手冊:MyBatis 框架作用詳解

一、MyBatis 簡介 MyBatis 是一款優秀的持久層框架,用于簡化 JDBC 開發。它通過將 Java 對象與數據庫表之間的映射關系進行配置,使得開發者可以使用簡單的 SQL 語句和 Java 代碼來完成復雜的數據操作。MyBatis 支持自定義 SQL 語句,提供了靈…

list的設計

#pragma once #include<assert.h> #include<iostream> using namespace std; namespace aqc {template<class T>struct list_node{list_node* _next;list_node* _prev;T _data;list_node(const T& xT())//加const防止權限放大&#xff0c;用引用減少拷貝…

基于 PyQt 的YOLO目標檢測可視化界面+ nuitka 打包

在人工智能和計算機視覺領域&#xff0c;YOLO&#xff08;You Only Look Once&#xff09;是一種廣泛使用的實時目標檢測算法。為了直觀地展示YOLO算法的檢測效果&#xff0c;我們使用Pyqt框架進行檢測結果的可視化&#xff0c;同時為了使其能夠脫離Python環境&#xff0c;我們…

2.1 閱讀錯題---02-04年

引言 2002年-2004年英語閱讀錯題匯總與分析總結。 一、02年閱讀 Text 1 題目&#xff1a;21題 題型&#xff1a;細節題 原因&#xff1a;單詞認錯了&#xff0c;原句中 in sympathy with 譯為 與…一致 &#xff1b;題干中的 sympathy 譯為 同情 題目&#xff1a;22題 題…

Axure疑難雜癥:中繼器制作下拉菜單(多級中繼器高級交互)

親愛的小伙伴,在您瀏覽之前,煩請關注一下,在此深表感謝! Axure產品經理精品視頻課已登錄CSDN可點擊學習https://edu.csdn.net/course/detail/40420 本文視頻課程記錄于上述地址第五章中繼器專題第11節 課程主題:中繼器制作下拉菜單 主要內容:創建條件選區、多級中繼器…

即刻啟程,踏上W55MH32高性能以太網單片機學習之路!

單芯片解決方案&#xff0c;開啟全新體驗——W55MH32 高性能以太網單片機 W55MH32是WIZnet重磅推出的高性能以太網單片機&#xff0c;它為用戶帶來前所未有的集成化體驗。這顆芯片將強大的組件集于一身&#xff0c;具體來說&#xff0c;一顆W55MH32內置高性能Arm Cortex-M3核心…

C++負載均衡遠程調用學習之上報功能與存儲線程池

目錄 1. Lars-reportV0.1 report模塊介紹 2.Lars-reporterV0.1 reporter項目目錄構建 3.Lars-ReporterV0.1 數據表和proto協議環境搭建 4.Lars-ReporterV0.1上報請求業務處理 5.Lars-ReporterV0.1上報請求模塊的測試 6.Lars-ReporterV0.2開辟存儲線程池-網絡存儲分離 1. L…

LabVIEW三軸電機控制

在工業自動化迅猛發展的當下&#xff0c;多軸伺服電機控制系統在制造業、3D 打印等眾多領域的需求與日俱增。它不僅要實現高精度的單軸運動控制&#xff0c;還需保障多軸協同作業的精準度&#xff0c;對響應速度也有嚴格要求。LabVIEW 開發多軸伺服電機控制系統&#xff0c;有效…

驅動開發硬核特訓 · Day 27(下篇):深入掌握 Common Clock Framework 架構與實戰開發

節。 在本篇內容中&#xff0c;我們將圍繞 Linux 內核中的時鐘子系統核心架構 —— Common Clock Framework&#xff08;簡稱 CCF&#xff09;展開深入講解&#xff0c;目標是幫助你全面理解其設計理念、主要數據結構、注冊流程、驅動實現方式&#xff0c;以及如何基于 NXP i.M…

數據庫基礎:數據庫類型與MySQL特點詳解

一、數據庫的主要類型 1. 關系型數據庫(RDBMS) 特點:基于關系模型,數據以表格形式存儲 代表產品:MySQL、Oracle、SQL Server、PostgreSQL 優勢:ACID事務支持、強一致性、成熟的SQL標準 適用場景:需要復雜查詢和事務支持的場景 2. 非關系型數據庫(NoSQL) 文檔型數據庫:Mo…

49認知干貨:產品的生命周期及類型匯總

49章:產品的生命周期與類型劃分 宇宙是運動的而非靜止的,任何事物亦是如此。只要是存在的事物,便必然存在周期性變化,就像四季更替中的冬日枯樹、春日新芽、夏日繁茂與秋日凋零。 這也意味著:事物的發展,離不開周期的更迭與演化,死亡并非終點,而是一種新的循環轉變。 …

【2025最新】為什么用ElasticSearch?和傳統數據庫MySQL與什么區別?

Elasticsearch 深度解析&#xff1a;從原理到實踐 一、為什么選擇 Elasticsearch&#xff1f; 數據模型 Elasticsearch 是基于文檔的搜索引擎&#xff0c;它使用 JSON 文檔來存儲數據。在 Elasticsearch 中&#xff0c;相關的數據通常存儲在同一個文檔中&#xff0c;而不是分散…

Docker安裝Gitblit(圖文教程)

本章教程,使用Docker安裝部署Gitblit。 一、Gitblit簡介 Gitblit 是一個基于 Java 的 Git 倉庫管理工具,主要用于在局域網或小型團隊環境中搭建私有 Git 服務器。它提供了一個簡單易用的 Web 界面,用于瀏覽代碼、管理倉庫和用戶權限等。 二、拉取鏡像 sudo docker pull git…

nDCG(歸一化折損累計增益) 是衡量排序質量的指標,常用于搜索引擎或推薦系統

nDCG&#xff08;歸一化折損累計增益&#xff09; 是衡量排序質量的指標&#xff0c;常用于搜索引擎或推薦系統。核心思想是&#xff1a;排名越靠前的高質量結果&#xff0c;對整體評分的貢獻越大&#xff0c;但后續結果的貢獻會逐漸“打折”。最終通過對比實際排序與理想排序的…

《從線性到二維:CSS Grid與Flex的布局范式革命與差異解析》

在前端開發的廣袤宇宙中&#xff0c;CSS布局技術宛如閃耀的星辰&#xff0c;不斷革新與演進&#xff0c;為構建絢麗多彩的網頁世界提供了堅實的支撐。其中&#xff0c;CSS Grid布局與Flex布局作為兩顆璀璨的明星&#xff0c;以其獨特的魅力和強大的功能&#xff0c;深受開發者們…

2025年01月03日美蜥(杭州普瑞兼職)一面

目錄 vue2 vue3 的區別react 性能優化react 組件傳值v-for 和 v-if 的優先級react 中多個接口請求的數據&#xff0c;需要渲染到一個列表上怎么處理百萬條數據怎么渲染vue2、vue3 的響應式原理微前端了解嗎git 版本控制git mearge 和 git rebase 的區別垂直水平居中react 中實…

【聚類分析】基于copula的風光聯合場景生成與縮減

目錄 1 主要內容 風光出力場景生成方法 2 部分程序 3 程序結果 4 下載鏈接 1 主要內容 該程序方法復現《融合風光出力場景生成的多能互補微網系統優化配置》風光出力場景生成部分&#xff0c;目前大多數研究的是不計風光出力之間的相關性影響&#xff0c;但是地理位置相近…

LeetCode 1128 等價多米諾骨牌對的數量 題解

今天的每日一題&#xff0c;我的思路還是硬做&#xff0c;不如評論區通過狀壓寫的簡單&#xff0c;但是答題思路加算法實現是沒有問題的&#xff0c;且時間復雜度也是可以通過的&#xff0c;畢竟全是o(n) 那么我就來說一下我的思路&#xff0c;根據dominoes[i] [a, b] 與 domi…