[Effective C++]条款30:透彻了解inlining的里里外外
.
1、内联函数
- inline内联函数的设计是为了消除函数调用的开销,在编译期间由编译器将函数体插入到每个调用点,来避免常规函数调用时的压栈、跳转和返回等操作,减少函数调用的时间开销。
1.1、内联函数作用
- 减少函数调用开销: 消除函数调用时的函数传递,控制权转移等开销
- 提高程序执行效率:特别适合小型、频繁调用的函数
- 保持代码结构化:即获得了宏替换的性能优势,又保持了函数的机构化特性
2、内联函数的使用
2.1、普通使用
#include <iostream>// 内联函数声明
inline int max(int a, int b) {return a > b ? a : b;
}int main() {int x = 10, y = 20;// 调用内联函数 - 编译器可能会直接替换为 return x > y ? x : y;std::cout << "Max is: " << max(x, y) << std::endl;return 0;
}
2.2、类成员内联函数
- 类的成员函数是隐式内联函数,在类定义中自动转换内联函数
#include <iostream>class Circle {
private:double radius;public:// 隐式内联:在类定义中直接实现的成员函数自动为内联void setRadius(double r) { radius = r; }// 显式内联inline double getArea() const;
};// 类外定义的成员函数也可以内联
inline double Circle::getArea() const {return 3.14159 * radius * radius;
}int main() {Circle c;c.setRadius(5.0);std::cout << "Area: " << c.getArea() << std::endl;return 0;
}
2.3、内联函数与模板
#include <iostream>// 模板函数通常与inline一起在头文件中定义
template <typename T>
inline T square(T x) {return x * x;
}int main() {std::cout << "Square of 5: " << square(5) << std::endl;std::cout << "Square of 3.14: " << square(3.14) << std::endl;return 0;
}
2.4、不适合内联的情况
#include <iostream>// 不适合内联的函数示例:函数体较大且复杂
inline void processData(int* data, int size) {// 复杂处理逻辑for (int i = 0; i < size; ++i) {data[i] = data[i] * 2 + 10;if (data[i] > 100) {data[i] = 100;}// 更多复杂操作...}// 更多代码...
}int main() {int arr[] = {1, 2, 3, 4, 5};processData(arr, 5); // 这种函数不适合内联for (int i = 0; i < 5; ++i) {std::cout << arr[i] << " ";}return 0;
}
思维导图笔记:
相关文章:
[Effective C++]条款30:透彻了解inlining的里里外外
. 1、内联函数 inline内联函数的设计是为了消除函数调用的开销,在编译期间由编译器将函数体插入到每个调用点,来避免常规函数调用时的压栈、跳转和返回等操作,减少函数调用的时间开销。 1.1、内联函数作用 减少函数调用开销: 消…...
CExercise_10_2动态内存分配_1从键盘输入输入中读取一个整数n,动态分配一个长度为n的整型数组。
题目: 编写程序,从键盘输入输入中读取一个整数n,动态分配一个长度为n的整型数组。 将数组元素初始化为1, 2, 3, …, n,并输出打印数组内容,最后释放内存。 注意: 初始化内存块时可以直接使用下标来操作内存块。 遍历打…...
这种情况是应为VScode的版本太新了,更新到1.86版本后要求远程连接服务器的内核版本不符合条件
这种情况是应为VScode的版本太新了,更新到1.86版本后要求远程连接服务器的内核版本不符合条件 解决方法 vscode降级,使用1.86以前的版本。亲测这种方法成功解决 首先关闭VSCode自动更新 Windows下载1.85版本链接:https://update.code.visua…...
文件IO7(中文字库的原理与应用/目录检索原理与应用/并发编程的原理与应用)
中文字库的原理与应用 ⦁ 基本概念 一般在项目中都会显示汉字,都采用中文简体字符集,计算机早期只有ANSI组织设计的ANSII码,其实也属于字符集,这套字符集并未收录中文,只收录256个字符。 所以后期中国国家标准总局设…...
基于SpringBoot的智慧社区管理系统(源码+数据库)
499基于SpringBoot的智慧社区管理系统,系统包含三种角色:管理员、用户主要功能如下。 【用户功能】 1. 首页:查看系统。 2. 超市商品:浏览超市中各类商品信息。 3. 动物信息:了解社区内的动物种类和相关信息。 4. 车位…...
OpenCV 伪彩色处理
伪彩色处理是将灰度图像通过颜色映射转换为彩色图像的技术,常用于增强可视化效果或突出显示特定灰度范围。OpenCV 提供了多种方法实现伪彩色处理。 1. 使用 applyColorMap 函数 OpenCV 提供了 cv::applyColorMap() 函数,支持多种预定义的色彩映射&…...
ADI 算法,ADAU1452算法
MCU控制DSP的公式...
低代码控件开发平台:飞帆中粘贴富文本的控件
效果: 链接: https://fvi.cn/729...
ICRA-2025 | 视觉预测助力机器人自主导航!NavigateDiff:视觉引导的零样本导航助理
论文:Yiran Qin 1 , 2 ^{1,2} 1,2, Ao Sun 2 ^{2} 2, Yuze Hong 2 ^{2} 2, Benyou Wang 2 ^{2} 2, Ruimao Zhang 1 ^{1} 1单位: 1 ^{1} 1中山大学, 2 ^{2} 2香港中文大学深圳校区论文标题:NavigateDiff: Visual Predictors are Ze…...
[问题帖] vscode 重启远程终端
原理 有的时候,在vscode 远程ssh连接到服务器的时候,可能遇到需要重启终端才能生效的配置,比如add group的时候,而此时无论你是关闭vscode终端重启,还是reload窗口都是没用的。 因为不管你本地是否连接了远程的vscode服…...
2025年前端框架全景解析:React、Vue、Angular的生态与未来之争
一、市场格局:全球与国内的双重差异12 全球市场React:凭借Facebook的支持和庞大的社区,全球使用率超40%,尤其在数据密集型应用(如金融、社交平台)中占据主导。其跨平台能力(React Native)和灵活生态(Next.js、Redux)是核心竞争力。Vue:亚洲市场占比显著,中国开发者…...
【Linux】Orin NX编译 linux 内核及内核模块
1、下载交叉编译工具:gcc 1)下载地址:https://developer.nvidia.com/embedded/jetson-linux 选择TOOLS中的交叉编译工具:gcc 11.3 2)解压 将gcc编译器解压到指定目录中,如:/home/laoer/nvidia/gcc 3)配置环境变量 创建: ~/nvidia/gcc/env.sh添加: #!/bin/bash e…...
Java 读取 csv 文件
1、引入 maven 依赖 <dependency><groupId>org.apache.commons</groupId><artifactId>commons-csv</artifactId><version>1.9.0</version> </dependency>2、java 代码 /*** csv 内容解析** param filePath 文件路径* para…...
蓝桥杯考前复盘
明天就是考试了,适当的停下刷题的步伐。 静静回望、思考、总结一下,我走过的步伐。 考试不是结束,他只是检测这一段时间学习成果的工具。 该继续走的路,还是要继续走的。 只是最近,我偶尔会感到迷惘,看…...
【C++经典例题】字符串转整数(atoi)的实现与解析
💓 博客主页:倔强的石头的CSDN主页 📝Gitee主页:倔强的石头的gitee主页 ⏩ 文章专栏:C经典例题 期待您的关注 目录 一、问题描述 二、解题思路 三、代码实现 四、代码逻辑详解 1. 变量初始化 2. 忽略前导空格 …...
Java面试黄金宝典44
1. 查看进程的运行堆栈信息命令 gstack gstack 是 Linux 系统下用于查看指定进程运行时堆栈信息的工具。当程序出现崩溃、死锁或者性能瓶颈等问题时,借助 gstack 可以查看进程中各个线程的调用栈,从而辅助开发人员定位问题。 定义 gstack 本质上是一个封装了底层 ptrace 系统…...
批量统一图像色彩
图嗯,用户之前问过如何批量统一多张图片的色调,我给出了几种方法,包括Photoshop、Lightroom、GIMP、在线工具和AI工具。现在用户进一步说明,他有一张红蓝色的图,其他几张是各种颜色,想用代码或AI批量将它们…...
数据库数据恢复——sql server数据库被加密怎么恢复数据?
SQL server数据库数据故障: SQL server数据库被加密,无法使用。 数据库MDF、LDF、log日志文件名字被篡改。 数据库备份被加密,文件名字被篡改。 SQL server数据库数据恢复过程: 1、将所有数据库做完整只读备份。后续所有数据恢…...
蓝桥杯C++组部分填空题
P1508 - [蓝桥杯2020初赛] 门牌制作 - New Online Judge #include<bits/stdc.h> using namespace std;int main() {int res 0;for(int i 1; i < 2020; i){int num i;while(num){if(num % 10 2) res;num/10;}}cout<<res;return 0; } 624 P1509 - [蓝桥杯20…...
C# 组件的使用方法
类 Stopwatch 计算时间 Stopwatch sw new Stopwatch(); sw.Start(); // 要执行的代码块 Thread.Sleep(2000);sw.ElapsedMilliseconds // 消耗时间 Console.WriteLine(sw.ElapsedMilliseconds);组件 ListView 属性设置 外观 - View - Details 行为 - Columns -(…...
Python 装饰器(Decorator)
文章目录 代码解析1. 装饰器定义 timer(func)2. 应用装饰器 timer **执行流程****关键点****实际应用场景****改进版本(带 functools.wraps)** 这是一个 Python 装饰器(Decorator) 的示例,用于测量函数的执行时间。下…...
QCustomPlot频谱图
使用QCutomPlot做的读取txt文件显示频谱图的demo,帮助大家了解QCustomPlot的基本使用 1.运行结果 demo比较简单,用于文件读取,鼠标放大缩小,右键截图等基础功能. 2.绘图详解 绘图核心是将类提升为QCustomPlot之后进行重绘,重绘之前设计图表曲线,图标标题,坐标轴,坐标轴范围,背…...
高并发的业务场景下,如何防止数据库事务死锁
一、 一致的锁定顺序 定义: 死锁的常见原因之一是不同的事务以不同的顺序获取锁。当多个事务获取了不同资源的锁,并且这些资源之间发生了互相依赖,就会形成死锁。 解决方法: 确保所有的事务在获取多个锁时,按照相同的顺序请求锁。例如,如果事务A需要锁定表A和表B,事务…...
【Grok 大模型深度解析】第二期:架构探秘与训练哲学
在上一期的内容中,我们对 Grok 大模型从技术溯源的角度,了解了它从 Transformer 架构局限性出发,迈向混合架构创新的历程,同时也梳理了从 Grok - 1 到 Grok - 3 的版本迭代所带来的技术跃迁以及其独特的差异化优势。这一期,我们将深入到 Grok 大模型的架构内部,探究其精妙…...
Spring Boot(九十):集成SSE (Server-Sent Events) 服务器实时推送
1 SSE简介 Server-sent Events(SSE) 是一种基于 HTTP 协议的服务器推送技术,它允许服务器主动向客户端发送数据。与 WebSocket 不同,SSE 是单向通信,即服务器可以主动向客户端推送数据,而客户端只能接收数据。 2 SSE特点 单向通信:SSE 是服务器向客户端的单向推送,客户…...
2025第四届大学生算法挑战赛(进阶训练1) A-E 题解报告
前言 这是第四届大学生算法挑战赛的练习赛系列,这个比赛是国家一级协会的。 这章是进阶训练1的A-E题,感觉还是蛮基础的。 题解 第四届大学生算法挑战赛 进阶训练1 A. 小理养鱼 思路: 博弈 斐波那契数组 省流描述: 经典的羊狼博弈,即1只…...
P8668 [蓝桥杯 2018 省 B] 螺旋折线
题目 思路 一眼找规律题,都 1 0 9 10^9 109说明枚举必然超时,找规律,每个点找好像没有什么规律,尝试找一下特殊点,比如:对角线上的点 4 16 36(右上角) 4k^2,看在第几层(…...
Matlab 三容水箱系统故障诊断算法研究
1、内容简介 Matlab 190-三容水箱系统故障诊断算法研究 可以交流、咨询、答疑 2、内容说明 略 其次,对 DTS200 三容水箱系统进行机理建模,可分为对象建模和故障 建模,搭建了水箱系统的 SIMULINK 模型并建立了基于 Taylor 展开及 T-…...
查看容器内的eth0网卡对应宿主机上的哪块网卡
查看容器内的eth0网卡对应宿主机上的哪块网卡 问题描述解决办法1. 进入容器,查看网卡的iflink(接口链路索引)值方法1:方法2: 2. 从宿主机过滤查询到的iflink(接口链路索引)值3. 确定veth接口连接的网桥方法2: brctl查看连接到网桥的接口--推荐 4. 查看网桥连接的物理网卡 问题描…...
【 Beautiful Soup (bs4) 详解】
引言 Beautiful Soup 是 Python 最流行的 HTML/XML 解析库,能够从复杂的网页文档中高效提取数据。以下是其核心知识点及示例代码。 一、库简介 1. 核心模块 BeautifulSoup:主类,用于构建文档树结构Tag:表示 HTML/XML 标签的对象…...
