函数调用时,系统首先保存主调函数的相关信息,再将控制转入被调函数,这些操作增加了程序执行的事件开销。(因为要找到这个函数并且传值等耗费性能的操作)
C++提供的内联函数形式可以减少函数调用的额外开销(时间空间开销),特别是一些常用的、短小的函数适合采用内联函数的形式。
inline float fun(float x){ return (x*x); }
int main(){ float x = 2; cout << fun(2); return 0; }
内联函数之所以能够减少函数调用时的系统空间和时间开销,是因为系统在编译程序的时候已经把内联函数体代码插入到相应的函数调用位置,成为主调函数内的一段代码,可以直接执行,不必再转换流程控制权。这样的结构,自然节省了时间和空间的开销,但使得主调函数变长。一般只把短小的函数写成内联函数。
实际上上面的代码在编译后,等同于如下代码
int main(){ float x = 2; cout << (x*x); return 0; }
注意以下两点
① 内联函数体不能包含循环语句、switch语句
② 内联函数的定义必须放在它第一次被调用之前,如果仅仅在声明函数原型的时加上关键字inline,并不能达到内联的效果(避免出现这种错误,最好在声明的时候就同时定义了)