c++之内联函数

C++之内联函数详解 c++之内联函数详解 阅读详情

概念:

以inline修饰的函数叫做内联函数,内联函数会在编译时展开,没有函数压栈的开销,提高程序运行的效率。

inline int add(int x, int y)
{
	return x + y;
}
int main()
{
	add(1, 2);
	return 0;
}

简单来说,内联函数就是以空间换时间

release版本下可以查看汇编是否存在call add

在debug版本下,编译器默认不会对代码优化,所以需要更改编译器设置

宏的优缺点?

宏的优点:增强代码的复用性,提高性能

宏的缺点:1.不易检查,宏是在预处理阶段进行简单的文本替换,在编译期间才会进行严格的类型                       检查

#include <stdio.h>
#define ADD(a, b) a + b

int main() {
    int result = ADD(1, 2; // 这里故意少了一个右括号
    printf("%d\n", result);
    return 0;
}

编译器通常会把错误位置定位到替换后的代码行,也就是 int result = 1 + 2; 这一行,而不是最初写 ADD(1, 2;

2.缺乏类型检查

#define MULTIPLY(a, b) a * b
int x = 5;
float y = 3.2;
int result = MULTIPLY(x, y);

宏在展开时不会检查 x 和 y 的类型是否适合进行乘法运算,编译器可能在后续处理中报错,但难以直观判断是宏定义的使用问题。

3.会导致副作用

#define MAX(a, b) ((a) > (b)? (a) : (b))
int i = 2;
int max_val = MAX(i++, 3);

宏展开后 i 会被多次自增,可能产生不符合预期的结果,而且这种副作用问题在代码检查时不容易发现。

哪些技术可以替代宏?

1.常量定义换用const

2.函数定义换用内联函数

总结:

内联函数可以提高效率,但代码很长或者有循环/递归都不适用,只适合短的代码,比如交换两个值的函数?

并且加了inline是否会在相应的位置展开?取决于编译器?inline只是给编译器一个建议并不是一定会展开。

内联函数不建议定义和声明分离,分离会导致链接错误,因为inline被展开之后就没有函数地址了,这样就链接时就无法找到函数。

WangEditor 5.0版本dangerouslyInsertHtml方法的正确使用方式 阅读详情

相关推荐

网工实验笔记:SNMP的配置

简单网络管理协议SNMP(Simple Network Management Protocol)是广泛应用于TCP/IP网络的网络管理标准协议。SNMP提供了一种通过运行网络管理软件的中心计算机(即网络管理工作站)来管理设备的方法。

2301_76170756的博客 2116

C++之内联函数

本文介绍了宏和内联函数的相关概念,主要介绍了内联函数的特性。

一只小卷毛的博客 1275

Python深度学习基于Tensorflow(17)基于Transformer的图像处理实例VIT和Swin-T

定义窗口注意力机制,与普通的注意力机制不同,其是在各个窗口中执行注意力机制。从中可以看到,其创新点主要是将图片进行拆分作为序列数据带入。差不多,主要实现的是一个下采样的算法过程;相同位置的像素绑定到一起构成一张新的。模型定义完毕后,初始化模型并开始训练。由于层之间重复性出现,可以定义一个。中,这里先实现拆分图片类。进行操作时我们定义三个类。定义一个多头注意力机制类。的数据,导入数据如下。导入数据,这里同样用。

bigcrab的博客 1634

C++之内联函数讲解

一、内联函数的作用 1.内联函数在编译的时候将不进行函数调用,编译器将内联函数的代码粘贴在调用(形式上调用)处,可以提高效率。 2.内联函数只能是代码很少很简单的函数,因为如果一个很大很复杂的函数即使设为内联,编译器也将自动设置该函数为非内联 二、小代码实现

五仁月饼哭了的博客 458

指导初学者使用Anaconda运行GitHub上One - DM项目的步骤

指导初学者使用Anaconda运行GitHub上One - DM项目的步骤。

AI的内部世界的博客 1485

随机变量序列 收敛 检验 matlab,利用MATLAB验证样条插值的收敛性

问题提出多项式插值是不收敛的,即插值的节点多,效果不一定就好。对样条函数插值又如何呢?理论上证明样条插值的收敛性是比较困难的,但通过本实验可以验证这一理论结果。.实验内容请按一定的规则分别选择等距或者非等距的插值节点,并不断增加插值节点的个数。考虑实验2.1中的函数或选择其他你有兴趣的函数。(中函数)。实验要求(1)随节点个数增加,比较被逼近函数和样条插值函数误差的变化情况。分析所得结果并与拉格朗...

weixin_30895121的博客 4735

C++之内联函数inline

前言: c 语言中有宏函数的概念。宏函数的特点是内嵌到调用代码中去,避免了函数调用 的开销。但是由于宏函数的处理发生在预处理阶段,缺失了语法检测和有可能带来的语意差错 1、基本概念 (inline关键字实现了真正的内嵌) inline void func(int a) { a = 20; cout &lt;&lt; a &lt;&lt;endl; } int mai...

weixin_39701261的博客 168

linux内核学习(八)---摄像头框架移植(上)

本章来开始进行摄像头的移植,同时回顾一下V4L2的整个框架

文艺小少年的博客 113

c++之内联函数以及宏定义

C++内联函数 常规函数与内联函数之间的主要区别是:编译器如何将他们组合到程序中。编译过程的最终产品是可执行程序,运行程序的时候,操作系统将这些程序载入到内存中,每条指令都有特定的内存地址,计算机逐步调用程序,调用常规函数指令的时候,程序跳到函数的内存地址,来回跳跃并记录跳跃位置需要一定的开销。 对于内联函数,编译器使用相应的函数代替函数调用,程序无需跳到另外一个位置执行代码,然后再跳回来。因

fly_fish_long的博客 896

图像处理:张量分解在图像处理领域的应用

随着计算机视觉和图像处理技术的快速发展,图像数据呈现出高维、多模态、海量等特点。传统的矩阵分解方法已经无法有效处理这些复杂的图像数据。张量分解作为一种高阶矩阵分解方法,可以很好地捕捉图像数据的高维结构信息,在图像处理领域展现出巨大的应用前景。本节介绍几种常用的张量分解算法,包括高阶SVD(HOSVD)、Tucker-ALS、CP-ALS等。这些算法的核心思想是通过迭代优化的方式,交替更新张量分解的因子矩阵,直到收敛为止。综上所述,本文系统地介绍了张量分解技术在图像处理领域的应用。

AI天才研究院 7104

视觉Transformer实战 | Data-efficient image Transformer(DeiT)详解与实现

在计算机视觉领域,Vision Transformer (ViT) 已经证明了纯 Transformer 架构在图像分类任务上的强大能力。然而,ViT 通常需要在大规模数据集上预训练才能达到最佳性能,DeiT (Data-efficient image Transformer) 通过引入一系列训练策略和优化,使得 Transformer 模型能够在相对较小的数据集上取得优异表现。本节将详细介绍 DeiT 的技术原理,并使用 PyTorch 从零开始实现 DeiT 模型。

盼小辉丶的博客 1341

初识C++之内联函数 auto关键字

内联函数 auto 范围for的介绍

林林林的博客 715

ABAP 7.40 新语法介绍系列之六:使用 FILTER 关键字对 ABAP 内表进行过滤

笔者之前写过的关于 ABAP 740 新语法的文章:本文介绍另一个新的关键字:FILTER.FILTER 是 ABAP 740 中引入的一个关键字,用于简化数据操作,它能够将内部表(Internal Table)中的数据按特定的条件进行过滤,并生成一个新的内部表。FILTER 的引入旨在使代码更加现代化和高效,尤其是在面对大量数据需要过滤的情况下。传统上,开发人员可能需要使用 LOOP AT 结合条件判断来实现,但使用 FILTER 关键字后,代码显得更加简洁且易于维护。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1171

c++ 之内联函数

C++内联函数(Inline)介绍   介绍内联函数之前,有必要介绍一下预处理宏。内联函数的功能和预处理宏的功能相似。相信大家都用过预处理宏,我们会经常定义一些宏,如 #define TABLE_COMP(x) ((x)>0?(x):0)    就定义了一个宏。   为什么要使用宏呢?因为函数的调用必须要将程序执行的顺序转移到函数所存放

lvmengmeng 606

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

上一篇: c++之引用
下一篇: C++之auto
Fcw0551
博客等级 码龄2年 330粉丝 115原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值