内联函数
在C语言中比较短小并可能多次使用的函数则会把它定义为宏函数。
例如,我们定义一个加法的宏函数:
#define Add(a,b) ((a)+(b))
宏函数的优点:
- 没有压栈开销(因为在预编译的过程中编译器会完成宏函数的替换)
- 可以增强复用性(比如宏常量,改动的时候只需要改动一处即可)
宏函数的缺点:
- 复杂,导致代码可读性差,可维护性差,容易误用
- 不能进行调试
- 没有类型安全的检查
那么在C++中如何解决这种问题呢?
在C++中用enum、const来代替宏常量。用内联函数来代替宏函数。
1.内联函数的使用(在函数前面加上inline)
inline int Add(int a,int b)
{
return a+b;
}
2.内联函数的特点
- 内联函数是一种以空间换时间的方法,省去了调用函数时的压栈开销,在使用该函数的位置直接进行展开。
- 内联函数对编译器来说只是一个建议,如果函数代码较短时,编译器会接受你的建议,如果函数代码较长或者是循环、递归等函数,编译器会自动优化。
- 内联函数不可以声明和定义分离,这样会导致链接错误,因为内联函数没有地址,它只是在使用的地方直接展开。
auto关键字(C++11)
auto是C++11里引入的新型语法,它是自动推导变量的类型
例如:
int a=10;
auto ra=a;
这里编译器会根据a的类型自动将auto推导为int,因此ra的类型也是int。
输出ra的类型可以用下方语句:(输出为