概念:
当我们用宏的时候会发现宏有不少缺点:
1、不能调试
2、没有类型安全的检查
3、有些场景很复杂,导致代码可读性差,可维护性差,容易误用 -- 需要频繁的用括号对参数进行分隔
由此我们可以用const和enum替代宏常量,用inline代宏函数。
以inline修饰的函数叫做内联函数,编译时C++编译器会像宏一样把调用内联函数的地方展开,没有函数调用建立栈帧的开销,可提升程序运行的效率
特性:
1. inline是一种以空间换时间的做法,如果编译器将函数当成内联函数处理,在编译阶段,会
用函数体替换函数调用
缺陷:可能会使目标文件变大
优势:少了调用开销,提高程序运行效率
2. inline对于编译器而言只是一个建议,内联说明只是向编译器发送的一个请求,编译器可以选择忽略这个请求。inline适用于规模较小、流程直接(非递归)、频繁调用的函数,大多数编译器都不支持内联递归函数
3.内联应该定义在头文件中,不能分离声明和定义,否则会发生链接错误 -- 内联函数的展开是在编译时就展开的,而编译时只会展开头文件不会链接自己写的函数,头文件只有声明没有定义,查找声明的地址时找不到定义则无法展开
4.定义在类中的成员函数会自动变成内联函数
使用:
//头文件
inline void func(){}
//main
int main() {
func();
return 0;
}