C++内联函数inline及与宏使用的比较

news/2025/10/29 12:04:31/文章来源:https://www.cnblogs.com/citStudy/p/19173940

一、内联函数inline

  常规的函数调用,会创建一个新的函数调用栈帧,并跳转到函数定义处执行,结束后再释放栈空间(栈内存)返回调用处。即一个函数要在被另一个函数调用的时候,才有生命,才会为其准备对应的内存空间,再调用完毕之后再清理释放结束,这样会带来一些时间和空间上的花销。自定义函数的一个作用,也是为了提高代码的重用性,可以在需要的时候随时调用,提高开发效率。如果,一个代码本身就不多,又频繁被调用的函数,要怎样避免时间和空间上开销的副作用。
C++已经帮我们考虑到这个问题,为我们提供了内联的机制,即仍然使用自定义函数,但在编译的时候,把函数代码插入到函数调用处,从而免去函数调用的一系列过程,像普通顺序执行的代码一样,来解决这个问题!用法是,在函数定义的前面加上关键字inline声明就可以了,如以下代码:

#include<iostream>
using namespace std;inline int Max(int a,int b)
{return a>b?a:b;
}int main()
{cout<<Max(3,5)<<endl;cout<<Max(7,9)<<endl;return 0;
}

  值得说明的是,内联函数的定义要在调用之前出现,才可以让编译器在编译期间了解上下文,进行代码替换。除此以外,内联函数与register变量类似,仅仅是我们提给编译器的一个请求,最终是否真正会实现内联,由编译器根据情况自行选择。

二、内联函数优缺点

1、优点:
(1)减少函数调用开销:内联函数避免了函数调用的开销,如参数压栈、函数调用指令和返回指令。
(2)提高效率:由于避免了函数调用的开销,内联函数通常比普通函数更快。
(3)改善代码的可读性:内联函数使得代码更易于阅读和理解,因为函数的调用和实现都在同一个位置。
2、缺点:
(1)代码膨胀:内联函数可能导致调用处的代码膨胀,尤其是对于复杂的函数。
(2)编译时间:编译器需要处理更多的代码,这可能会增加编译时间。
(3)维护问题:内联函数的代码膨胀可能会使得代码更难以维护。
(4)性能问题:在某些情况下,内联函数可能会导致性能问题,特别是对于大型函数。
(5)静态绑定:内联函数的调用是静态绑定的,这意味着在编译时就已经决定了调用哪个版本的函数,而不是运行时动态决定。
(6)函数定义的可见性:内联函数的定义必须在所有调用该函数的文件中可见,这可能会导致重复定义的错误。
3、使用内联函数的情况:
在实际编程中,是否使用内联函数取决于你对代码性能和维护性的权衡。对于小型的、简单的函数,内联通常是有益的,但对于大型函数,最好避免使用内联,以免影响性能和代码的可读性。

三、内联(inline)与宏定义(define)的区别比较

1、宏(Macro)
在 C++ 中,宏(Macro)是一种文本替换机制,用于在编译过程中将代码中的特定文本序列替换为其他文本序列。宏通常用于代码的预处理,在编译器开始编译源代码之前,预处理器会读取源代码文件,并执行宏替换。简单来说,宏就是一种简单的文本替换。

eg:
#define PI 3.14159
double radius = 5.0;
double area = PI * radius * radius;
宏函数:
#define SQUARE(x) (x * x)
int result = SQUARE(5);

宏的分类与基本语法:
(1)无参数宏(对象宏/常量宏),用于定义常量或简单文本替换:

#define PI 3.14159
#define MAX_SIZE 100
#define STR "Hello, World!"double area = PI * radius * radius;  // 替换为 3.14159 * radius * radius
int array[MAX_SIZE];                 // 替换为 int array[100];

(2) 带参数宏(函数宏)类似函数,可以接受参数:

#define SQUARE(x) ((x) * (x))
#define MAX(a, b) ((a) > (b) ? (a) : (b))
#define ADD(a, b) ((a) + (b))int result = SQUARE(5);      // 替换为 ((5) * (5))
int max_val = MAX(3, 7);     // 替换为 ((3) > (7) ? (3) : (7))

2、内联(inline)与宏定义(define)的区别比较
内联函数与宏定义在C++编程中都有展开代码来提高代码执行效率的作用,它们区别如下:
(1)首先,从定义和性质上看,宏定义并非真正的函数,它在预处理阶段进行文本替换,即用宏体替换所有的宏名。而内联函数本质则仍然是一种函数,它在编译时直接嵌入到目标代码中,替换了函数调用,从而消除了函数调用的开销。内联函数具有普通函数所有的特性,比如有返回值、参数列表等,可以进行类型安全检查,而宏定义则没有这些特性。
(2)从使用方式和调试角度看,宏定义在定义时需要小心处理宏参数,以避免出现二义性,而内联函数则不存在这个问题。此外,由于内联函数是函数,因此它可以进行调试,而宏定义则不能。
(3)从作用范围上看,内联函数作为类的成员函数时,可以访问类的所有成员(公有、保护、私有),而宏定义则不能。
(4)在代码展开方面,虽然宏定义和内联函数都实现了代码的直接插入,但它们的处理时机不同。宏定义在预处理阶段就完成了所有的替换工作,而内联函数则是在编译阶段进行插入。这样的差异使得内联函数在效率提升的同时,还能确保代码的安全性和可读性。通过避免函数调用的压栈和清栈开销,内联函数进一步提高了程序的执行效率。
通过比较也说明,inline具有取代宏的价值意义。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/949755.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025年江苏网站制作推广服务权威推荐:南京网站建设优化/无锡官网制作方案/徐州网站开发公司服务商精选

在当前数字经济蓬勃发展的背景下,江苏地区的网站制作推广服务市场展现出旺盛的需求。企业对于专业、高效、可靠的网站制作与数字化推广服务的需求持续上升,特别是在用户体验优化、搜索引擎排名提升和数字化营销等领域…

vue2x添加一个元素拖拽功能

拖拽元素绑定:<div class="add-twin-wrap-container"><div class="add-twin-wrap" @click.stop><p class="title" @mousedown="onDragStart">添加场景类型…

解决 pnpm 安装 Electron 缺少二进制文件的问题

解决 pnpm 安装 Electron 缺少二进制文件的问题 问题描述 使用 pnpm 安装 Electron 时,可能出现以下错误: Error: Electron failed to install correctly, please delete node_modules/electron and try installing …

基于libsvm的支持向量机在MATLAB中的实现

一、环境准备 1. 工具箱安装 % 下载并安装libsvm-mat工具箱(推荐使用林教授版本) % 解压后添加到MATLAB路径 addpath(genpath(libsvm-mat-2.91));% 验证安装 version -libsvm2. 数据准备 % 加载示例数据(鸢尾花数据…

【ACM出版 | 高录用快见刊、检索】第五届工商管理与数据科学国际学术会议 (BADS 2025)

第五届工商管理与数据科学国际学术会议 (BADS 2025)将于2025年11月11-12日在中国广州南方学院召开。【合作ACM出版社审稿录用速度快,最快投稿后2-4个月左右见刊,见刊后1个月左右EI、Scopus、谷歌学术检索。】 【含on…

2025年酒精回收塔生产厂家权威推荐榜单:DMF回收塔/甲醇回收塔/乙醇回收塔源头厂家精选

2025年酒精回收塔生产厂家权威推荐榜单:DMF回收塔/甲醇回收塔/乙醇回收塔源头厂家精选 在化工、制药和食品行业,一台高效的酒精回收塔能将30%的稀酒精提纯至95%,帮助企业大幅降低生产成本。 酒精回收塔作为化工、制…

2025 年投入式液位计厂家联系方式推荐,杭州浙达精益提供专业液位测量设备与技术支持

行业背景 在工业生产、水利工程、能源开采等众多领域,液位测量是保障生产安全、提升运营效率的关键环节。随着工业自动化水平的不断提升,市场对液位计的精度、稳定性、耐用性要求愈发严格,尤其在一些复杂工况下,如…

直扩信号参数估计:载频、码速率和扩频增益

MATLAB程序用于估计接收到的直扩信号的载频、码速率和扩频增益: 主程序文件 %% 直扩信号参数估计:载频、码速率和扩频增益 clear; close all; clc;fprintf(=== 直扩信号参数估计 ===\n);%% 生成测试直扩信号(如果无…

2025 年防爆位移传感器厂家联系方式推荐,杭州浙达精益提供专业设备与可靠技术支持

行业背景 在工业生产领域,位移测量是保障设备精准运行、提升生产安全与效率的关键环节,尤其是在石油、化工、矿山等存在易燃易爆风险的场景中,防爆位移传感器的性能与可靠性直接关系到生产活动的安全开展。随着工业…

2025年振弦式频率读数仪609供货厂家权威推荐榜单:读数仪609/测读仪读数仪609/土木工程用609读数仪源头厂家精选

在土木工程、大坝监测和矿山安全等领域,振弦式频率读数仪作为核心数据采集设备,其精度与可靠性直接关系到工程安全监测的有效性。其中,609系列读数仪凭借其500-6000Hz的测频范围和0.1Hz的高分辨率,成为行业广泛应用…

2025 年线性位移传感器厂家联系方式推荐,杭州浙达精益提供专业设备与可靠技术支持

行业背景 在工业自动化与精密制造领域,线性位移传感器作为实现精准位置测量的关键设备,其性能直接影响生产流程的稳定性与产品质量的把控。随着我国工业转型升级步伐加快,西气东输、南水北调等重大工程,以及钢铁、…

2025年湖北防撞缓冲车出租渠道权威推荐榜单:防撞缓冲车租赁/出租防撞车/出租防撞缓冲车源头公司精选

在湖北道路施工、市政维护等高危作业场景中,防撞缓冲车已成为保障施工区域人员与设备安全的关键装备。据行业数据显示,2024年我国防撞缓冲车租赁市场规模已突破百亿元,湖北作为中部基建大省,市场需求呈现稳定增长态…

Servlet 国际化 - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

直播|均降 40% 的 GPU 成本,大规模 Agent 部署和运维的捷径是什么?

随着 AI 原生浪潮的到来,智能体(Agent)正成为企业创新的新引擎。然而,在生产环境中大规模落地 Agent,却面临开发复杂、运维困难、成本高等挑战。随着 AI 原生浪潮的到来,智能体(Agent)正成为企业创新的新引擎。…

postman 汉化和破~解版来了 (Windows用户进)

【操作方法】 1、下载后解压2、打开压缩包,里面有两个目录,解压app压缩包,打开APP文件夹,3、如果你之前已经安装了postman APP,直接右键查看文件所在位置,进入到其目录下,--【如果没安装,直接看下面5所说】4、…

JavaScript中的闭包:概念与应用

在JavaScript中,闭包是一个非常重要的概念,它不仅是语言的核心特性之一,还在实际开发中广泛应用。本文将深入探讨闭包的定义、工作原理以及一些常见的应用场景,帮助开发者更好地理解和利用闭包。 1. 什么是闭包? …

2025年山东出租履带蜘蛛车平台权威推荐榜单:租赁蜘蛛车/租赁履带蜘蛛车/蜘蛛车出租源头公司精选

在城市建设与工业维护领域,履带蜘蛛车正以其独特的灵活性与稳定性,成为高空作业中不可或缺的设备。山东地区两家领先的租赁服务商,以专业设备与全方位服务助力各类项目高效推进。 在城市化进程持续加速与工业设施维…

2025年商标注册机构权威推荐榜:国内商标、国际商标、图形商标、文字商标全流程服务厂家精选

2025年商标注册机构权威推荐榜:国内商标、国际商标、图形商标、文字商标全流程服务厂家精选 行业背景与发展趋势 随着我国知识产权保护体系的不断完善,商标注册行业正迎来前所未有的发展机遇。据最新数据显示,2024年…

2025年户外面料厂家推荐排行榜:尼龙/涤纶/尼龙格子/珍珠点/登山布/户外速干/瑜伽/梭织/TR消光面料公司推荐

2025年户外面料厂家推荐排行榜:尼龙/涤纶/尼龙格子/珍珠点/登山布/户外速干/瑜伽/梭织/TR消光面料公司推荐 随着户外运动的蓬勃发展和消费者对功能性纺织品需求的不断提升,户外面料行业正迎来新一轮技术革新与市场增…

2025年铝单板厂家推荐排行榜,氟碳铝单板,仿木纹铝单板,仿石材铝单板,幕墙装饰铝单板公司精选

2025年铝单板厂家推荐排行榜:氟碳铝单板、仿木纹铝单板、仿石材铝单板、幕墙装饰铝单板公司精选 行业背景与发展趋势 建筑装饰材料行业正经历着深刻的变革,铝单板作为幕墙装饰领域的重要材料,其技术迭代和市场应用呈…