除了我们正常写的函数以外,还有两种特别的函数:内联函数和宏函数。
宏函数最大的优点就是不像普通函数那样占用堆栈。
内联函数格式就是在普通函数前面加个inline,调用的时候跟正常是一样的。
#define Add(x,y)((x)+(y))//宏函数
inline int Add(int a, int b){//内联函数
int c = a+ b;
return c;
}
int main(){
int a = 10;
int b = 20;
cout << "d:" << Add(a, "abc”) << endl;
return 0;
}
内联函数的作用:在函数调用的地方展开函数体,相当于变成一个宏函数,减少函数栈帧的开销,提升效率。
内联函数的使用场景:代码量小,频繁使用的小函数建议使用内联。而代码量大的函数,像有递归、循环的函数不宜使用内联,这种大函数就算你使用内联,编译器一般也会优化成普通函数。
与宏函数相比,内联函数有类型安全的检查。
内联函数以空间换时间,以代码复制为代价,减少堆栈使用,提高代码运行效率。
inline对编译器而言,仅仅只是一个建议,编译器会自动优化。