一、内联函数
1.1 介绍
C++中推荐使用内联函数替代C中宏代码片段,使用inline关键字声明内联函数,。
C中宏代码片段。
#define void FUN(a,b) (a < b ? a : (b))
C++中内联函数时关键字inline必须和函数定义结合在一起,否则编译器会直接忽略内联请求。
inline void fun_inline()和实现写在一起,不用声明函数。
inline void fun_inline() {
//todo
}
1.2 内敛函数和普通函数区别
内联函数在最终生成的代码中没有定义,编译器会直接将内联函数体替换到调用的地方。所以内联函数没有压栈出栈,效率会高一些。
如下面代码,main函数中调用内联函数fun_inline,最终生成的代码就是机械的把fun_inline替换成实现。
inline void fun_inline() {
cout << "fun_inline" << endl;
}
int main() {
//fun_inline();替换成下面的实现
//C++编译器会直接将内联函数体插入到调用的地方
{
cout << "fun_inline" << endl;
}
system("pause");
return 0;
}
C++编译器不一定准许函数的内联请求
内联函数是一种对编译器的请求,因此编译器可能拒绝该请求,如果拒绝了内联请求,那么内联函数就跟普通函数没有区别。内联函数由编译器处理,直接将编译后的函数体插入到调用的地方。宏代码片段是由预处理处理的,进行简单的文本替换,没有任何编译过程。
C++编译器能够进行编译优化,就算函数不是内联函数,也可能被编译成内联函数。
二、默认参数
函数参数赋一个默认值,若调用函数时没有参数就是用默认值,若调用函数有参数时就不适用默认值。
void fun(int x