不错呦!smile@林凯西,确保“准备文件”中的几个文件都有安装,S...您好,看了您这篇帖子觉得很有帮助。但是有个问题想请...我的修改过了怎么还被恶意注册呢 @jjjjiiii 用PJ快9年了,主要是A...PJ3啊,貌似很少有人用PJ了,现在不是WP就是z...@332347365,我当时接入时错误码没有-10...楼主,ChkValue值应为-103是什么意思呢?...大哥 你最近能看到我发的信息,请跟我联系,我有个制...
C++的内联函数
编辑:dnawo 日期:2010-11-14
在C++中,函数的调用会带来降低效率的问题,因为调用函数实际上将程序执行顺序转移到函数所存放的内存地址中,待函数执行完后,再返回到执行该函数前的地方。这种转移操作要求在转去前要保护现场并记忆执行的地址,返回后先要恢复现场,并按原来保存地址继续执行。因此,函数调用要有一定的时间和空间方面的开销,于是将影响其效率。特别是对于一些函数体代码不是很大,但又频繁地被调用的函数来讲,解决其效率问题更为重要。引入内联函数实际上就是为了解决这一问题。
比如下边代码:
在main函数中执行echo函数时,程序需要跳转到echo函数所在的内存地址中执行,结束后再回到main函数中,这就影响到了效率,考虑函数体不大,于是我们引入了内联函数(函数定义时加inline关键字):
这样在程序编译时,所有调用echo的地方都被替换成了echo函数体,因而在程序执行阶段,就不用跳来跳去的执行了。
另外,所有在类内定义的函数都是内联函数:
注意:由于内联函数是实现为代码替换,所以定义为内联函数的函数体不宜过大,如果函数体过大,某些编译器就会放弃内联方式,而改用调用普通函数的方式,这样就失去了内联函数的意义了,所以,内联函数的函数体代码不宜过大,一般就是3-4行代码即可。
比如下边代码:
复制内容到剪贴板
程序代码

#include <iostream>
using namespace std;
void echo(char x){cout<<x<<endl;}
int main()
{
echo('A');
return 0;
}
using namespace std;
void echo(char x){cout<<x<<endl;}
int main()
{
echo('A');
return 0;
}
在main函数中执行echo函数时,程序需要跳转到echo函数所在的内存地址中执行,结束后再回到main函数中,这就影响到了效率,考虑函数体不大,于是我们引入了内联函数(函数定义时加inline关键字):
复制内容到剪贴板
程序代码

#include <iostream>
using namespace std;
inline void echo(char x){cout<<x<<endl;}
int main()
{
echo('A');
return 0;
}
using namespace std;
inline void echo(char x){cout<<x<<endl;}
int main()
{
echo('A');
return 0;
}
这样在程序编译时,所有调用echo的地方都被替换成了echo函数体,因而在程序执行阶段,就不用跳来跳去的执行了。
另外,所有在类内定义的函数都是内联函数:
复制内容到剪贴板
程序代码

#include <iostream>
using namespace std;
class Mzwu
{
public:
void AA(){cout<<"AA()"<<endl;} //隐式内联函数
inline void BB(){cout<<"BB()"<<endl;} //显式内联函数
void CC();
};
inline void Mzwu::CC() //类定义体外声明为内联函数
{
cout<<"CC()"<<endl;
}
using namespace std;
class Mzwu
{
public:
void AA(){cout<<"AA()"<<endl;} //隐式内联函数
inline void BB(){cout<<"BB()"<<endl;} //显式内联函数
void CC();
};
inline void Mzwu::CC() //类定义体外声明为内联函数
{
cout<<"CC()"<<endl;
}
注意:由于内联函数是实现为代码替换,所以定义为内联函数的函数体不宜过大,如果函数体过大,某些编译器就会放弃内联方式,而改用调用普通函数的方式,这样就失去了内联函数的意义了,所以,内联函数的函数体代码不宜过大,一般就是3-4行代码即可。
评论: 0 | 引用: 0 | 查看次数: 3491
发表评论
请登录后再发表评论!