C++中函数调用需要建立栈环境,进行参数复制,保护调用现场,返回时还要进行返回值复制,恢复调用现场。这些都是额外开销。
我们既要使用函数调用来体现结构化和可读性,又要是效率尽可能的高。解决办法就是将这种小函数声明为内联。
inline bool isnumber(char); //内联声明
对函数的内联声明必须在调用之前。因为内联函数的代码在程序运行时是直接嵌入在调用处执行的,不影响链接,只在编译时确定运行代码。因此编译时,在调用之前就看到内联函数非常必要。
注意:
1、内联函数尽可能小,且结构简单。
2、不能含有结构控制语句,如switch、while。否则编译将无视内联声明,只是视同普通函数产生调用代码。
3、经验上,内联函数只适用于1~5行的小函数且调用次数频繁。对含有许多语句的大函数,函数调用的开销微不足道,没有必要使用内联。
正因为函数调用有开销,而内联函数的调用开销非常非常小,所以程序编写时尽量适量的使用内联函数。