c++内联函数
c++内联函数与常规函数的主要区别不在于编写方式的不同。在于c++编译器如何将它们组合到程序中。
执行到函数调用指令时,程序将立即存储该指令的内存地址,变将函数复制到堆栈,跳到标记函数起点
的内存单元,执行函数代码,函数体执行完后跳到地址被保存的指令处。来回跳跃并记录跳跃位置,需要
一定的开销。
c++内联函数提供另外一种选择,编译器将使用相应的函数代码替换函数调用。程序无需跳到另外一个位置
执行代码,然后再跳回来。因此,内联函数的运行速度比常规函数稍快,当代价是需要占用更多的内存,特别
是调用位置过多的时候。
所以应该有选择的使用内联函数。建议函数体中代码较短时考虑使用内联函数,如求最大值,平方等等。
要使用内联函数,必须采用下述错数之一:
- 在函数声明前加上关键字inline
- 在函数定义前加上关键字inline
内联函数与宏
宏是内联代表的原始实现。
内联代码的参数是按值传递的,而宏是通过文本替换的方式。
//如内联函数
inline double square(double x){return x*x};
//宏
#define square(x) x*x
//square(3.5+1.5) 内联与宏的结果不同。
//square(x++) 内联与宏的结果不同。
//只有在square(x) 是内联与宏的结果相同。 x一个数