admin 管理员组文章数量: 887021
内联
inline函数
在编译阶段处理
在调用点直接代码展开,不会生成符号,由于是直接代码展开的方式
所以在另一个文件中无发调用这个函数,因为不会生成同名符号,所以无法调用
inline int sum(int a,int b)
{
return a+b;
}
1.inline和宏有什么区别?
首先是处理时间的区别,编译阶段处理是有类型检查和安全检查的
而宏是在预编译阶段处理的没有类型检查和安全检查的,所以内敛是安全的
所以在c++中inline是一种更安全的宏
编译是以编译单元为单位的,所以inline函数是本文件可见的
2.那inline函数和static函数有什么区别?
内联函数直接代码展开没有开栈和清栈的开销,而static是有的
内联函数是因为不生成符号的而static是生成符号的
由于内联函数没有开栈和清栈的开销所以效率高,但是为什么不把所有函数都设置为内联函数?
因为他是有缺陷的。
设在头文件中有内联函数 inline int xxx();里面有20行代码
而在其他源文件中分别调用了3,4,5次,这样导致代码就变得非常庞大复杂重复,空间占用率高,
反而导致编译效率变低。
所以其是以代码膨胀为代价,以空间换时间,这时有一个度的。
所以inline函数的使用建议:
1.函数的执行开销小于函数开栈清栈的开销
inline的限制:
1.只在release版本生效
2.内联只是给编译器的建议,如需要传入参数的函数,由于传参是在链接过程中的,所以不会
处理为内联,递归也是不会的,循环也是不会的,switch也是不会的
3.内联是基于实现的不是声明的,所以inline是要标明在函数体的定义点前面的
4.内联的实现是写在.h文件中的
本文标签: 内联
版权声明:本文标题:内联 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1687238380h79820.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论