【一天一个C++小知识】008.内联函数

本文探讨了C++中宏定义函数与内联函数的区别,分析了宏在函数定义中存在的问题,如不符合预期的运算顺序和副作用,以及内联函数的优势和限制。通过实例展示了宏在条件判断和自增操作上的缺陷,强调了内联函数在减少调用开销和代码优化方面的潜在益处。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.宏中定义函数存在问题,它并不是真正的函数

#define BAND(x) (((x) > 5 && *x) < 10) ? (x) : 0)

int main(){
	for (int i = 4; i < 11; i++){
		int a = i;
		cout << "a = " << a << endl << '\t';
		cout << "BAND(++a) = " << BAND(++a) << endl;
		cout << "\t a = " << a << endl;
	}
}

结果:

a=4
	BAND(++a)=0
		a=5
a=5
	BAND(++a)=8
		a=8
a=6
	BAND(++a)=9
		a=9
a=4
	BAND(++a)=0
		a=5
....

a=4时,因为第一个条件不满足,那么只执行了一次自加操作;a=5时,++a=6,满足条件,再判断第二个++a=7,之后赋值++a=8。

C++中使用内联函数来实现,内联函数怎么看都是函数,但是它会在适当的地方像宏一样展开,节省了函数调用的开销。
内联函数有两处不能用,当函数代码过于复杂时,或者要显式或隐式地取函数地址。
内联知识编译器的建议,并不强迫内联。
构造函数和析构函数看起来足够简单使用内联,但实际上二者可能隐式地嵌套调用,并不简单。所以内不内联,还是要结合具体问题具体分析的。


欢迎扫描二维码关注微信公众号 深度学习与数学   [每天获取免费的大数据、AI等相关的学习资源、经典和最新的深度学习相关的论文研读,算法和其他互联网技能的学习,概率论、线性代数等高等数学知识的回顾]

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值