【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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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…