可能重复:
C++中内联函数的好处?
有什么区别
#include <iostream>
using namespace std;
int exforsys(int);
void main( )
{
int x;
cout << "n Enter the Input Value: ";
cin>>x;
cout << "n The Output is: " << exforsys(x);
}
int exforsys(int x1)
{
return 5*x1;
}
Run Code Online (Sandbox Code Playgroud)
和
#include <iostream>
using namespace std;
int exforsys(int);
void main( )
{
int x;
cout << "n Enter the Input Value: ";
cin>>x;
cout << "n The Output is: " << exforsys(x);
}
inline int exforsys(int x1)
{
return 5*x1;
}
Run Code Online (Sandbox Code Playgroud)
这两个定义对于我猜的代码是一样的,那么使用内联函数定义有什么好处呢?
Cha*_*rns 11
该inline关键字表明该功能被内联编译器.通常,当调用函数时,寄存器的当前内容被pushed(复制)到存储器.函数返回后,它们被popped(复制回).
这需要一点时间,但通常很少,无论函数做什么都会使函数调用开销相形见绌.有时,当一个非常小的函数在紧密循环中每秒调用数千次时,所有这些函数调用的组合函数调用开销可能会累加起来.在这些情况下,程序员可以向编译器建议,不要在该循环中调用该函数,而是将函数的内容直接放入循环中.这避免了开销.
某些编译器,尤其是Microsoft Visual C++,忽略了该inline关键字.微软认为他们的优化器非常聪明,可以知道何时应该内联函数.对于那些你真的想要内联函数的情况,微软和其他供应商有时提供专有的,"不,我的意思是!" 关键词.在Visual C++的情况下,__forceinline如果我没记错的话.但是,如果优化器非常强烈地认为内联函数是一个坏主意,那么即使是这样,仍然可以忽略.
由于编译器足够聪明,可以决定哪些函数可以从内联中受益,哪些不会,inline只有真正的效果才能改变函数链接.默认情况下,inline函数具有外部链接.
该inline 关键字仅仅是一个建议,编译器.编译器可以决定内联未声明的函数inline,或者不声明内联函数inline.