内联函数
内联函数概念
以inline修饰的函数叫做内联函数,编译时C++编译器会在调用内联函数的地方展开,没有函数调用建立栈帧的开销,内联函数提升程序的运行效率。
内联函数特性
Inline是以空间换时间;但是这里的空间注意并不是内存的空间,而是可执行程序的空间变大了;在编译阶段,会用函数体替换函数体替换函数调用。
Inline对于编译器而言只是一个建议,不同编译器关于inline实现机制可能不同,(假如在调用一个指令很长的函数时,即使你使用了inline内联函数,但是如果这个函数超过了这个编译器的规定线时,编译器会忽略这个inline特性);
所以inline一般建议:
- 函数规模较小(函数不是很长,具体没有准确说法,取决于编译器的内部实现);
- 不是递归、且频繁调用函数
- 不建议声明和定义分离
为什么不建议inline内联函数声明和定义分离呢?
内联函数是不会直接调用函数的,不会直接给这个函数开辟栈帧,而是会在调用内联函数的地方展开这个函数;
而此时inline被展开,就没有了函数地址了,链接就会找不到了。
面试题:宏优缺点
优点:
- 增强代码的复用性;
- 提高性能;
缺点:
- 不方便调试宏(因为预编译阶段进行了替换);
- 导致代码可读性差,可维护性差,容易误用;
- 没有类型安全的检查。
使用宏时容易犯错注意点:
- 不是函数
- 分号
- 括号控制优先级
核心点:宏是预处理阶段进行替换