C++内联函数

概念

        用inline修饰的函数就叫做内联函数,编译时编译器会在调用内联函数的地方直接将内联函数展开,而不是调用。内联函数的调用没有建立栈帧的开销,有利于效率的提高。

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

int main()
{
	int sum = Add(1, 2);
	cout << sum << endl;
	return 0;
}

在运行上述代码时,在使用Add函数时我们可以通过反汇编,编译器是对这个函数进行调用,而不是在这里展开,如图

在Add函数前加上inline后,代码如下

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

int main()
{
	int sum = Add(1, 2);
	cout << sum << endl;
	return 0;
}

编译器会直接在调用内联函数的地方直接将内联函数展开,而不是再进行调用。如图

 特性

  1. inline是一种以空间换时间的做法,如果编译器将函数当做内联函数进行处理,在编译阶段会用函数体替换函数调用。但这可能会使目标文件变大,因为它会在使用的地方直接展开。优点是减少了建立栈帧的开销,提高了效率。

  2. inline对于编译器来说仅仅是一个建议,而不是加上inline就是内联函数。加上inline仅仅是向编译器发出了一个申请,编译器可以忽略这一申请。一般来说,内联机制适用于函数规模较小、流程直接、频繁调用的函数。不适用递归函数。

  3. inline不建议声明和定义分离,分离容易出现链接错误。声明和定义分离后,vs报错如图         

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值