内联函数
以inline修饰的函数叫做内联函数,编译时C++编译器会在调用内联函数的地方展开,没有函数调用建立栈帧的开销,内联函数提升程序运行的效率。减少函数栈帧的开辟和销毁,如当频繁调用一个函数的时候,此时消耗栈帧的比较大(不断地调用栈帧销毁栈帧)。因此要将函数栈帧的优化掉。
inline是一种以空间换时间的做法,如果编译器将函数当成内联函数处理,在编译阶段,会用函数体替换函数调用,缺陷:可能会使目标文件变大,优势:少了调用开销,提高程序运行效率。
要在函数定义处添加 inline 关键字,在函数声明处添加 inline 关键字虽然没有错,但这种做法是无效的,编译器会忽略函数声明处的 inline 关键字。
对于 inline
函数,通常建议将声明和定义放在同一个头文件中,以确保在编译时能够正确展开并避免链接错误
宏函数
使用宏函数没有函数栈帧的消耗,因为在预处理阶段就被替换了,没有了函数的栈帧的消耗了。
- 不可以调试
- 没有类型安全检查
- 容易写错