【C++】inline的作用

一、inline的作用

1.1函數內聯

  • 作用?:建議編譯器將函數調用替換為函數體代碼,減少函數調用的開銷(壓棧/跳轉)。
  • ?注意?:這只是對編譯器的建議,編譯器可能忽略(如函數體過大或遞歸)。

1.2 解決鏈接問題

允許在多個編譯單元(.cpp 文件)中重復定義相同的函數(通常用于頭文件中的函數定義)。

// utils.h
inline void print() {std::cout << "Hello";
}

?原理?:鏈接器會合并所有編譯單元中的 inline 函數定義,避免重復定義錯誤。

1.3 ?類內定義的成員函數?(隱式內聯)

class Vector {
public:float x, y;// 隱式 inlinefloat length() const {return std::sqrt(x * x + y * y);}
};

1.4 C++17內聯

解決全局變量/靜態變量在頭文件中的重復定義問題。

inline int globalVar = 42; // 頭文件中定義全局變量

關鍵注意事項?

編譯器自主權?:

  • inline 只是建議,編譯器可能拒絕內聯(如函數包含循環、遞歸或虛函數)。
    可通過編譯器選項強制內聯(如GCC的__attribute__((always_inline)))。

?適合場景?:

- 小函數?:適合內聯(如getter/setter)。
- 頻繁調用?:減少調用開銷。
- 頭文件庫代碼?:避免鏈接錯誤。

不適合場景?:

- 大函數?:可能導致代碼膨脹(二進制體積增大)。
- ?虛函數?:通常無法內聯(需運行時確定調用)。
- 遞歸函數?:編譯器通常忽略內聯建議。

定義必須在調用處可見?:

  • 內聯函數的 ?定義必須出現在每個調用它的編譯單元中,通常放在頭文件中,否則編譯器無法展開代碼-
  • 普通函數可以聲明在頭文件、定義在.cpp文件。

鏈接與ODR規則?

  • inline 允許函數在多個編譯單元中重復定義,但所有定義必須完全相同,否則未定義行為。
  • 非inline函數多次定義會導致鏈接錯誤。

?調試影響?:

內聯函數在調試時可能難以追蹤(無調用棧),編譯時關閉優化(如-O0)可緩解。

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

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

相關文章

代碼隨想錄|圖論|04廣度優先搜索理論基礎

廣搜的使用場景 廣搜的搜索方式就適合于解決兩個點之間的最短路徑問題。 因為廣搜是從起點出發&#xff0c;以起始點為中心一圈一圈進行搜索&#xff0c;一旦遇到終點&#xff0c;記錄之前走過的節點就是一條最短路。 當然&#xff0c;也有一些問題是廣搜 和 深搜都可以解決…

Xposed框架深度解析:Android系統級Hook實戰指南

引言:Android系統定制化的革命性突破 在移動安全研究和系統優化領域,傳統的APP修改方案面臨??三重技術瓶頸??: ??逆向工程壁壘??:APK重打包方案需處理簽名校驗、代碼混淆等防護,平均耗時增加200%??兼容性挑戰??:Android碎片化導致設備適配率不足65%??功能…

大模型在通訊網絡中的系統性應用架構

一、網絡架構智能化重構?? ??1.1 空天地一體化組網優化?? 智能拓撲動態調整??&#xff1a;大模型通過分析衛星軌道數據、地面基站負載及用戶分布&#xff0c;實時優化天地一體化網絡拓撲。例如&#xff0c;在用戶密集區域&#xff08;如城市中心&#xff09;自動增強低…

軟件測試進階:Python 高級特性與數據庫優化(第二階段 Day6)

在掌握 SQL 復雜查詢和 Python 數據庫基礎操作后&#xff0c;第六天將深入探索Python 高級編程特性與數據庫性能優化。通過掌握 Python 的模塊與包管理、裝飾器等高級語法&#xff0c;結合數據庫索引優化、慢查詢分析等技術&#xff0c;提升測試工具開發與數據處理效率。 一、…

【NLP】自然語言項目設計04

目錄 04模型驗證 代碼架構核心設計說明 05運行推理 代碼架構核心設計說明 項目展望 項目簡介 訓練一個模型&#xff0c;實現歌詞仿寫生成 任務類型&#xff1a;文本生成&#xff1b; 數據集是一份歌詞語料&#xff0c;訓練一個模型仿寫歌詞。 要求 1.清洗數據。歌詞語料…

數據結構1 ——數據結構的基本概念+一點點算法

數據結構算法程序設計 什么是數據結構 數據&#xff08;data&#xff09;&#xff1a;符號集合&#xff0c;處理對象。 數據元素&#xff08;data element&#xff09;&#xff0c;由數據項&#xff08;data item&#xff09; 組成。 關鍵字&#xff08;key&#xff09;識別…

每日八股文7.1

每日八股-7.1 網絡1.能說說 TCP 報文頭部都包含哪些關鍵字段嗎&#xff1f;2.TCP 是如何確保數據傳輸的可靠性的&#xff1f;你能詳細談談嗎&#xff1f;3.你能解釋一下 TCP 滑動窗口是如何設計的&#xff1f;它主要解決了什么問題&#xff1f;4.TCP 協議的擁塞控制是如何實現的…

高性能 List 轉 Map 解決方案(10,000 元素)

文章目錄 前言一、問題背景&#xff1a;為什么List轉Map如此重要&#xff1f;二、基礎方法對比&#xff1a;Stream vs For循環三、性能優化關鍵點四、面試回答技巧 前言 遇到一個有意思的面試題&#xff0c;如標題所說&#xff0c;當10,000條數據的List需要轉Map&#xff0c;如…

今日行情明日機會——20250701

上證指數縮量收陽線&#xff0c;形成日線上漲中繼&#xff0c;個股上漲和下跌總體持平。 深證指數量能持續放大&#xff0c;即將回補缺口位&#xff0c;短線注意周三或周四的調整。 2025年7月1日漲停股主要行業方向分析 1. 芯片&#xff08;17家漲停&#xff0c;國產替代&…

P1312 [NOIP 2011 提高組] Mayan 游戲

題目描述 Mayan puzzle 是最近流行起來的一個游戲。游戲界面是一個 7 7 7 行 5 \times5 5 列的棋盤&#xff0c;上面堆放著一些方塊&#xff0c;方塊不能懸空堆放&#xff0c;即方塊必須放在最下面一行&#xff0c;或者放在其他方塊之上。游戲通關是指在規定的步數內消除所有…

Spring Boot 2 多模塊項目中配置文件的加載順序

Spring Boot 2 多模塊項目中配置文件的加載順序 在 Spring Boot 2 多模塊項目中&#xff0c;配置文件的加載遵循特定的順序規則。了解這些規則對于正確管理多模塊應用的配置至關重要。 一、默認配置文件加載順序 Spring Boot 會按照以下順序加載 application.properties 或 …

邊界的藝術:支持向量機與統計學習時代的王者

當揚勒丘恩的卷積神經網絡LeNet在90年代初于手寫數字識別領域綻放光芒&#xff0c;卻因計算與數據的桎梏未能點燃更廣泛的燎原之火時&#xff0c;人工智能&#xff0c;特別是其子領域機器學習&#xff0c;正步入一個理論深化與方法論多元化的關鍵時期。經歷了符號主義通用智能探…

js filter()

listType(queryParams.value).then(response > {filterTable.value response.rows.slice(1); // 只顯示前3條數據;filterTable.value filterTable.value.filter(item > {return wnSensorsList.value.some(sensorsgroup > {return sensorsgroup.sensorType item.cod…

Python 庫 包 nltk (Natural Language Toolkit)

文章目錄 &#x1f9f0; 一、nltk 的主要功能? 文本處理功能? 內置語料庫&#xff08;Corpora&#xff09; &#x1f4e6; 二、安裝與使用1. 安裝 nltk2. 下載語料庫&#xff08;第一次使用時需要下載&#xff09; &#x1f50d; 三、常用功能示例示例 1&#xff1a;分詞示例…

設計模式之房產中介——代理模式

手撕設計模式之房產中介——代理模式 1.業務需求 ? 大家好&#xff0c;我是菠菜啊&#xff0c;好久不見&#xff0c;今天給大家帶來的是——代理模式。老規矩&#xff0c;在介紹這期內容前&#xff0c;我們先來看看這樣的需求&#xff1a;我們有一套房產需要出售&#xff0c…

Unity進階課程【六】Android、ios、Pad 終端設備打包局域網IP調試、USB調試、性能檢測、控制臺打印日志等、C#

Unity打包 Android、ios、Pad 終端設備局域網IP調試、USB調試 今天咱們繼續進階課程&#xff0c;定期更新&#xff0c;有想學習的不懂的地方也可以告訴我。 提示&#xff1a;內容純個人編寫&#xff0c;歡迎評論點贊&#xff0c;來指正我。 文章目錄 Unity打包 Android、ios、P…

c++中的mutex同步機制與多線程同步實現

C 中的 std::mutex 與多線程同步 在多線程編程中&#xff0c;互斥鎖&#xff08;Mutex&#xff09; 是一種同步機制&#xff0c;用于保護共享資源&#xff08;如變量、數據結構&#xff09;免受數據競爭&#xff08;Data Race&#xff09;的影響。C 標準庫中的 std::mutex 提供…

網絡安全2023—新安全新發展

關于綠盟科技 綠盟科技集團股份有限公司(以下簡稱綠盟科技),成立于 2000 年 4 月,總部位于北京。公司于 2014 年 1 月 29 日在深圳證券交易所創業板上市,證券代碼:300369。綠盟科技在國內設有 50余個分支機構,為政府、金融、運營商、能源、交通、科教文衛等行業用戶與各…

WebSocket掃盲

WebSocket 是一種網絡通信協議&#xff0c;它允許在單個 TCP 連接上進行全雙工、雙向的實時通信。它是為了解決傳統 HTTP 協議在實時交互應用中的局限性而設計的。 核心概念和特點 解決 HTTP 的痛點&#xff1a; 單向性&#xff1a; HTTP 是請求-響應模式。客戶端發起請求&…

Springboot整合高德地圖

1.登錄高德開放平臺 高德開放平臺 | 高德地圖API 2.獲取密鑰key 1.點擊控制臺 2.創建新應用 3.添加key 4.創建key 5.獲取key 3.java整合 1.高德配置類 package com.thk.controller.map;import org.springframework.beans.factory.annotation.Value; import org.springfram…