【C++】C++内联函数也可以用来代替宏

本文探讨了C++中宏和内联函数的差异,详细解释了宏在字符串替换过程中的陷阱,以及如何通过添加括号来避免这些陷阱。同时,文章推荐在现代C++编程中使用内联函数替代宏,以获得更稳定和可预测的行为。

宏是可以带参数的,它在形式上和函数非常相似。不过不像函数,宏仅仅是字符串替换,不是按值传递,所以在编写宏时要特别注意,一不小心可能就会踩坑。

 

#define SQ(y) y*y

当n = 9 时,SQ(n) = 81

如果把SQ(n)换成SQ(n+1)却得不到100,因为sq = n+1*n+1;

 

如果希望得到正确的结果,应该将宏定义改为如下的形式:

#define SQ(y) (y)*(y)

 

要想得到正确的结果,还应该对宏加以限制,在两边增加( ),如下所示:

#define SQ(y) ( (y)*(y) )

 

发生函数调用时,编译器会先对实参进行计算,再将计算的结果传递给形参,并且函数执行完毕后会得到一个值,而不是得到一个表达式,这和简单的字符串替换相比省去了很多麻烦,所以在编写C++代码时我推荐使用内联函数来替换带参数的宏。

 

和宏一样,内联函数可以定义在头文件中(不用加 static 关键字),并且头文件被多次#include后也不会引发重复定义错误。这一点和非内联函数不同,非内联函数是禁止定义在头文件中的,它所在的头文件被多次#include后会引发重复定义错误。这一点非常好啊!!!!

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值