文章目录
- 1. 内联概念
- 2. 内联特点
- 3. 宏的优缺点
1. 内联概念
以inline修饰的函数叫做内联函数,编译时C++编译器会在调用内联函数的地方展开,无函数建立栈帧的开销,内联函数提升程序运行的效率。
-
在release模式下,默认展开生效。
-
在debug模式下,展开不生效,需要对编译器进行设置才可以展开。
Visual Studio 2022为例,先对文件右键选择属性,设置如下:
设置后:
2. 内联特点
-
inline是一种以空间换时间的做法,函数体替换函数调用,缺陷:过多使用会使目标文件变大,优势:少了函数调用的栈帧开销,提高程序运行效率。
-
内联只是向编译器发出的一个请求,编译器可以选择忽略这个请求。不同编译器关于inline实现机制可能不同,一般来说内联用于优化函数规模较小、流程直接(非递归)、频繁调用的函数,如果该函数规模太大,编译器不会展开内联函数。
-
inline不建议声明和定义分离,分离会导致链接错误。因为inline被展开,就没有函数地址了,链接就会找不到。
3. 宏的优缺点
宏的优点:
- 增强代码的复用性。
- 提高性能。
宏的缺点:
- 不方便调试。(预编译进行了替换)
- 可读性差,可维护性差。
- 没有类型安全的检查(利与弊都有)。
C++中可以用什么替代宏?
- 常量用const enum枚举。
- 短函数用inline内联函数。