内联成员函数的优缺点【C++】

内联成员函数在调用是为什么能够减少调用的开销?为什么能够提高执行效率?它不是只在一个地方先声明了吗为什么会增加编译后代码的长度?... 内联成员函数在调用是为什么能够减少调用的开销?为什么能够提高执行效率?它不是只在一个地方先声明了吗为什么会增加编译后代码的长度? 展开
 我来答
百度网友3ad5602
推荐于2018-04-30 · TA获得超过717个赞
知道小有建树答主
回答量:345
采纳率:100%
帮助的人:353万
展开全部
优点是提高运行时间效率,缺点是增加了空间开销
对于普通函数,函数调用需要时间和空间开销,调用函数实际上将程序执行流程转移到被调函数中,被调函数的代码执行完后,再返回到调用的地方。这种调用操作要求调用前保护好现场并记忆执行的地址,返回后恢复现场,并按原来保存的地址继续执行。对于较长的函数这种开销可以忽略不计,但对于一些函数体代码很短,又被频繁调用的函数,就不能忽视这种开销。引入内联函数正是为了解决这个问题,提高程序的运行效率。
对于内联函数,在程序编译时,编译器将程序中出现的内联函数的调用表达式用内联函数的函数体来进行替换。由于在编译时将内联函数体中的代码替代到程序中,因此会增加目标程序代码量,进而增加空间开销,而在时间开销上不象函数调用时那么大,可见它是以目标代码的增加为代价来换取时间的节省。

参考资料: http://www.yuanma.org/data/2007/1211/article_2916.htm

fox000002
2011-06-19 · TA获得超过3824个赞
知道大有可为答主
回答量:2356
采纳率:97%
帮助的人:1156万
展开全部
普通函数的话,调用时给个内存地址进行跳转,完成后跳转回来

内联函数的话,直接就把处理指令加到调用的位置

也就是普通函数只有一份函数指令拷贝,内联函数有多少次调用就要多少个函数指令拷贝

执行效率的提高就是主要因为少了跳转
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
072jncgnt
2011-06-19 · TA获得超过2310个赞
知道大有可为答主
回答量:4534
采纳率:0%
帮助的人:833万
展开全部
内联函数必须是和函数体申明在一起,才有效。像这样的申明Inline Tablefunction(int I)是没有效果的,编译器只是把函数作为普通的函数申明,我们必须定义函数体。

Inline tablefunction(int I) ;

  这样我们才算定义了一个内联函数。我们可以把它作为一般的函数一样调用。但是执行速度确比一般函数的执行速度要快。

  我们也可以将定义在类的外部的函数定义为内联函数,比如:

Class TableClass{
 Private:
  Int I,j;
 Public:
  Int add() ;
  Inline int dec()
  Int GetNum();
}
inline int tableclass::GetNum(){
return I;
}

  上面申明的三个函数都是内联函数。在C++中,在类的内部定义了函数体的函数,被默认为是内联函数。而不管你是否有inline关键字。

  内联函数在C++类中,应用最广的,应该是用来定义存取函数。我们定义的类中一般会把数据成员定义成私有的或者保护的,这样,外界就不能直接读写我们类成员的数据了。对于私有或者保护成员的读写就必须使用成员接口函数来进行。如果我们把这些读写成员函数定义成内联函数的话,将会获得比较好的效率。

Class sample{
 Private:
  Int nTest;
 Public:
  Int readtest()
 Void settest(int I)
}

  当然,内联函数也有一定的局限性。就是函数中的执行代码不能太多了,如果,内联函数的函数体过大,一般的编译器会放弃内联方式,而采用普通的方式调用函数。这样,内联函数就和普通函数执行效率一样了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式