inline函数?

butterflygogogo 2010-11-19 10:52:39
c++中的inline函数和普通的函数有什么区别 ?
是在效率上更好些吗?
...全文
158 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
flower_fancy 2010-11-19
  • 打赏
  • 举报
回复
inline函数会在调用处展开具体的函数,这样可以节省一般调用函数时的时间和内存开销。。。
dingshaofengbinbin 2010-11-19
  • 打赏
  • 举报
回复
效率在某些情况下是高了,但是不是绝对的,而且不是什么函数都能成为inline的,一般情况下必须是简单的函数
hai040 2010-11-19
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 zhangjian33446 的回复:]
引用 1 楼 ouyh12345 的回复:

inline直接把函数展开,省略了入栈、出栈的过程
效率肯定好

小弟对编译器的编译过程也不是很清楚 麻烦问下 你所说的入栈和出栈是什么意思?
[/Quote]
这个看汇编教程,进入函数时要保存现场,调用完要恢复
lhy 2010-11-19
  • 打赏
  • 举报
回复
你写inline,编译器不一定真给你inline。
libinfei8848 2010-11-19
  • 打赏
  • 举报
回复
你可以写两个函数一个带inline,一个不带,看汇编
hongkun18 2010-11-19
  • 打赏
  • 举报
回复
普通函数调用需要栈来管理内存(调用前后的变量等信息).inline则不需要此过程.
qq120848369 2010-11-19
  • 打赏
  • 举报
回复
函数体没有递归,语句简单,函数使用频率高,那可以声明为inline,至于是否真的会变成inline由编译器再做决定.
cnpsl 2010-11-19
  • 打赏
  • 举报
回复
inline是一个以空间换时间的语意,调用inline函数之处将直接拷贝函数代码到调用处,免去了函数调用的参数入栈、出栈过程,因此节约时间。
inline函数的特点是简而短,应该避免在循环体内调用inline函数。
羽飞 2010-11-19
  • 打赏
  • 举报
回复
这个问题在effective中讲的很清楚
無_1024 2010-11-19
  • 打赏
  • 举报
回复
对于代码比较段的inline内联函数而言效率更好
butterflygogogo 2010-11-19
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 ouyh12345 的回复:]

inline直接把函数展开,省略了入栈、出栈的过程
效率肯定好
[/Quote]
小弟对编译器的编译过程也不是很清楚 麻烦问下 你所说的入栈和出栈是什么意思?
gules 2010-11-19
  • 打赏
  • 举报
回复
inline函数是指将函数体代码替换函数调用处,即不真正进行函数调用,而是代码替换,这样效率是要高一些(节省了函数调用的开销,如栈操作)。
不过,inline在C++编译器中只是一个指示,而不是命令。也就是说,是否inline化主动权在编译器,编译器有一套规则来决定是否进行代码替换。一般而言,只有极简单的函数才适合inline。
ouyh12345 2010-11-19
  • 打赏
  • 举报
回复
inline直接把函数展开,省略了入栈、出栈的过程
效率肯定好
zongzihe 2010-11-19
  • 打赏
  • 举报
回复
inline适用于代码较为简单的函数,没有递归和循环,在编译时进行代码展开,减少了函数调用的消耗,但是也增大了代码的体积。
车太靓 2010-11-19
  • 打赏
  • 举报
回复
。。。。。。哦。学习了
Metrosexual 2010-11-19
  • 打赏
  • 举报
回复
Inline 替换效率高,但是Inline 代码最好不要超过5行!效率!
luciferisnotsatan 2010-11-19
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 gules 的回复:]

inline函数是指将函数体代码替换函数调用处,即不真正进行函数调用,而是代码替换,这样效率是要高一些(节省了函数调用的开销,如栈操作)。
不过,inline在C++编译器中只是一个指示,而不是命令。也就是说,是否inline化主动权在编译器,编译器有一套规则来决定是否进行代码替换。一般而言,只有极简单的函数才适合inline。
[/Quote]
正解

inline直接把函数替换成代码,减少了函数调用的消耗。但同时,编译后的代码量就增加了。
inline只是个建议,是否替换,由编译器决定
zourong0412 2010-11-19
  • 打赏
  • 举报
回复
楼上和一楼正解..我们也在学inline,简单的说是内联函数,普通函数执行的时候,还要调用它,但是inline就不用,相当于直接执行inline里面的代码,所以效率很高,直接用内存,但是代码多的时候,建议还是将它封装成一个函数,inline可以想象成直接执行。编译的时候,就好像宏定义一样,知道宏定义吗?就是#define M 50这样的,不过是否能形成内联函数,需要看编译器对该函数定义的具体处理。

上面的是我的理解,内联函数还分为显示内联和隐式内联两种,在类声明的内部声明,而在类声明外部定义叫做显式内联函数;在类声明的内部定义,叫做隐式内联函数;我习惯用隐式的内联...因为定义和声明放一起了,不用再写一遍(==有点懒...)

如果还是不理解的话,建议去看百科,然后自己编一下代码,这个很简单,很好理解的。

64,646

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧