内联函数和普通函数的区别
1、普通函数
const string& func(const string &s1, const string &2)
{
return s1.size() < s2.size() ? s1 : s2;
}
优点:该函数作为子函数可以重复调用,不必重写代码
缺点:调用函数比直接求解等价条件表达式慢。主要是因为调用子函数要做很多工作:调用前要保存寄存器,并在返回时恢复;赋值实参;程序需要转向新位置执行。
2、内联函数
将函数指定为内联函数
inline const string& func(const string &s1, const string &2)
{
return s1.size() < s2.size() ? s1 : s2;
}
可以看作就是将它在程序中每个调用点上“内联地”展开。假设我们将 func定义为内联函数,则调用
cout<<func(s1,s2)<<endl;
在编译时将展开为:
cout<< (s1.size() < s2.size() ) ? s1 : s2) <<endl;
内联函数可以避免函数调用的开销,本例将func指定为内联函数,从而消除了写成函数的额外执行开销。
内联函数的使用
1、一般来说,内敛机制适用与优化小的、只有几行的而且经常被调用的函数。大多数的编译器都不支持递归函数的内联。一个1200行的函数也不太可能在调用点内联展开。
2、内联函数的定义对编译器而言必须时可见的,以便编译器能够在调用点内联展开该函数的代码。此时,仅有函数原型是不够的。
参考文献 《C++ Primer》