这涉及一个效率问题。记住,调用函数的开销是很大的,所谓的空间开销是指调用函数前,先要将原来的函数保存在寄存器(占用寄存器空间)里面,并在调用结束后恢复。调用函数时,还要复制实参(占用内存空间)。如果被调用函数一旦调用频繁,就会花费很多空间。如果你有一段“短小而频繁调用的函数”,内联是个不错的选择。
“如果含有复杂的分支或循环结构,我使用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只是你给编译器提一个建议,希望它将函数内联,至于它会不会执行就不一定了。
基本上复杂的函数它是不会同意的,就算同意了,也只会使你的编译变得更将浪费时间,而执行速度得不到什么提升。还有,一些编译器是不会通过含有递归的内联函数的。
记住,短小而且反复调用的函数进行内联就可以了。