C++ 的函数中,什么时候要写inline

问:自己写的C++的函数中,哪些情况可以用inline哪些情况不可以用inline?

可以用的情况里,哪些情况适合用inline哪些情况不适合用inline?

适合用的情况里,哪些情况效果明显,哪些情况不显著?
如果含有复杂的分支或循环结构,我使用inline会有什么后果。

所谓“系统空间开销很大”是什么意思?

这涉及一个效率问题。记住,调用函数的开销是很大的,所谓的空间开销是指调用函数前,先要将原来的函数保存在寄存器(占用寄存器空间)里面,并在调用结束后恢复。调用函数时,还要复制实参(占用内存空间)。如果被调用函数一旦调用频繁,就会花费很多空间。如果你有一段“短小而频繁调用的函数”,内联是个不错的选择。

“如果含有复杂的分支或循环结构,我使用inline会有什么后果?”

事实上,所谓内联,是编译器将内联函数在函数调用点上展开函数代码。例如
inline int small(int a,int b) { return a < b ? a : b ; }
cout << small ( a, b ) << endl ;等同于
cout << (a < b ? a : b) << endl; 编译器会将函数调用语句转换为函数代码,再进行编译。inline只是你给编译器提一个建议,希望它将函数内联,至于它会不会执行就不一定了。
基本上复杂的函数它是不会同意的,就算同意了,也只会使你的编译变得更将浪费时间,而执行速度得不到什么提升。还有,一些编译器是不会通过含有递归的内联函数的。
记住,短小而且反复调用的函数进行内联就可以了。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-02-12
现在内联函数的本来意义已经不存在了。

现在定义函数为内联仅仅是允许函数在不同cpp中重复定义。

内联函数是可以自调用的。
第2个回答  2009-02-16
inline 执行效率很高,但是系统空间开销很大(inline函数所在的空间是系统专门开辟的固定空间,不像普通函数只有在执行的时候才开辟空间)。
所以在频繁执行某个函数的时候,而且代码很短的时候适合用inline,一般是1~5行代码,不能含有复杂的分支或循环结构;
递归调用的函数不能定义为内联函数。

至于有什么后果我也不清楚,C++课本上是这么说的:)
第3个回答  2009-02-12
一般把只有几行代码的简短函数可以声明为inline,但编译器不保证声明为inline的函数一定会内联展开,
对含有循环语句的函数不适合声明为内联函数,对频繁使用的函数如果声明为内联,则可以明显提高程序
的执行速度,但代价是会生成较大的目标文件。
inline函数的一种替代是宏定义函数,但宏定义函数具有很多缺点,比如参数必须分别用括号括起,
不支持参数类型检查等,因此,尽量使用内联函数。
第4个回答  2009-02-12
某个函数出现次数很多,但是很简单。
相似回答