C++中的内联函数

define 定义的宏函数的缺点

我们都知道在C语言中,当我们使用一些使用频率比较高,代码量又比较少的函数的时候,我们一般都会将这种函数用define去定义,这样可以加快我们代码的运行效率。但是实际上,define定义的宏函数会出现很多的坑。比如:

#define Add(a, b) (a + b)

这个宏函数看上去好像没什么问题,但是其实,这个代码是一个有问题的代码。
如果我们的a和b是一个表达式那么我们得考虑代码的优先级。比如我们这一段代码:

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

int main()
{
	int x = 5, y = 7;
	int z = Add(x | y, x & y);
	printf("%d", z);
	return 0;
}

这个代码看似运行的结果是12,但是实际上运行的结果是5。
在这里插入图片描述
这是为什么呢?因为在我们的编译过程中会发生宏替换,我们的Add这个宏函数会被替换掉,变成这样子。

int z = Add(x | y + x & y);

我们的本意是想先让x和y按位或,在用x和y按位与,最后用按位或和按位与的结果去相加。但是实际上,我们的程序不会这样走。我们的程序会先走加法运算,然后再进行按位与和按位或等等,这些优先级比加法低的运算。

C++中如何解决C语言中define出现的这些问题

为了解决define这个容易坑人的问题,C++中就设计了一个叫做内联函数的东西。

内联函数的优势

  1. 内联函数和我们平时写的普通函数是非常相似的。就是在普通函数的前面写了一个叫做inline这个关键字。也就是说,在内联函数中,我们能够更容易地发现程序出现的问题。
  2. 并且,C++的编译器是支持内联函数的调试的,但是define定义的宏函数是不支持调试的,这也是内联函数要优于define定义的宏函数的一点。
  3. 内联函数和我们define定义的宏函数一样,都是在一个函数被频繁调用的情况下使用的,这也就说明了我们的内联函数可以完全替代我们的define定义的宏函数。

内联函数的使用语法

说了这么多,我们来用内联函数来实现一下我们上面写的Add函数吧。
上面这个add函数用内联函数的语法是这样写的:

inline int Add(int a, int b)
{
	return a + b;
}

以上就是对于C++中内联函数的一些相关的介绍。

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值