inline void func(){
//函数体
}
当程序编译的时候,其他调用func()函数的地方,会被func()函数的函数体替换,比如:
#include <iostream>
using namespace std;
inline void func(){
//函数体
int A = 3;
cout<<A<<endl;
}
int main(){
int A = 5;
func();
cout<<A<<endl;
return 0;
}
程序在编译的时候,main()中的func()会被int A = 3; cout<<A<<endl;
代替。而且,内联函数里的局部变量依然只作用于函数体内。
2. 内联函数存在的意义是什么?
第一,提高函数调用效率。当函数仅有简单几行代码时,调用此函数的主要开销在调用机制上了,可能还要别的文件查询,而内联函数就节省了这一笔开销。但是需要注意的是,仅在函数功能十分简单的时候才有用。
第二,代替带参数的宏。#define A B
可以将代码中的A在编译阶段都用B代替,但是当B
是一个表达式的时候,会增加程序出现逻辑bug的风险。比如下面的代码:
#include <iostream>
using namespace std;
#define Q(x) x*x
int main(){
int a = 1;
cout<<Q(a+1)<<endl;
}
你会发现,程序输出结果并不是我们预想中的4
,而是3
,因为#define
指令在编译的时候,只是简单粗暴的将Q(a+1)
换成了a+1*a+1
。当然,我们给第三行改成#define Q(x) (x)*(x)
,确实能够解决例子中的问题,但是如果Q(a+1)
变成了10/Q(a+1)
,你会发现结果又不对了,因此#define
在替换成表达式的时候需要格外小心,但是使用内联函数就不会有这么多顾虑了。