社区
C++ 语言
帖子详情
inline函数的问题
blacksky3
2009-05-01 11:44:45
大家都知道inline其实是替代c里面函数宏,目的是为了减少调用的开销,但是inline具体在什么时候会变得无效,想请大家讨论下
我目前总结的是:
1.inline函数对于指针或者引用调用无效,因为只有在这种情况下编译期不能知道具体引用类型,和函数是否是virtual无关
...全文
231
21
打赏
收藏
inline函数的问题
大家都知道inline其实是替代c里面函数宏,目的是为了减少调用的开销,但是inline具体在什么时候会变得无效,想请大家讨论下 我目前总结的是: 1.inline函数对于指针或者引用调用无效,因为只有在这种情况下编译期不能知道具体引用类型,和函数是否是virtual无关
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
21 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
blacksky3
2009-05-03
打赏
举报
回复
up
SimonYeung
2009-05-02
打赏
举报
回复
有些时候即时没有用inline,但是编译器会根据情况进行优化
光宇广贞
2009-05-01
打赏
举报
回复
所以你目前“总结”的对于指针和引用无效的结论是不正确的……编译器一般自视强大,会无视你的要求……原谅丫吧……
本来,如果你明白到底什么叫做inline,你就应该知道你的总结与inline的原理没什么关系。
对于编译器来说void*型只不过是int 型的另一种写法罢了,所以使用C++语言不要特意去强调什么指针和引用的特殊之处。我到现在都认为C++是一种弱类型的语言,你用过C#就知道什么才叫做“强类型”。
你对C++的了解仅仅是纸上谈兵,不是贬义,要不说,为什么代码经验可以做为衡量程序员水平的标准呢……多写代码吧……
Jinhao
2009-05-01
打赏
举报
回复
inline并不是必须的,只是对编译器的一种优化请求,而你也不用关心这个请求的结果,编译器完全可以忽略你的请求,因为inline关键字并不会改变你函数的行为。
光宇广贞
2009-05-01
打赏
举报
回复
对于VC的编译器,是否内联是由command line里面的/o1, /o2选项来决定的。与你是否inline无关。你写的inline只是给看代码的“人”来看的。
Jarrys
2009-05-01
打赏
举报
回复
inline函数是否被优化,是在编译前由编译器决定的,它只优化满足特定条件的函数,比如:该函数比较精简或频繁调用,就会直接用函数内容代替函数调用
liliangbao
2009-05-01
打赏
举报
回复
帮顶~
pengzhixi
2009-05-01
打赏
举报
回复
这个要看编译器认为函数是否足够简单了.
alexhilton
2009-05-01
打赏
举报
回复
我不喜欢用inline副作用太多
珍惜生命远离CPP
2009-05-01
打赏
举报
回复
即使不写inline,编译器也可能会内联的.
Jinhao
2009-05-01
打赏
举报
回复
只要这个函数足够简单,满足优化条件,编译器就会优化inline
inline add(int a, int b)
{
return a + b;
}
inline add(int a, int b)
{
int i = a;
i += 5;
i += 5;
i += 5;
return a + b;
}
以上两种都会被优化。
inline sum(unsigned a)
{
if(a > 0)
return a + sum(a - 1);
else
return 0;
}
递归肯定不会被优化。
blacksky3
2009-05-01
打赏
举报
回复
看反汇编用指针操作都会有call,换成具体对象操作就没了
blacksky3
2009-05-01
打赏
举报
回复
其实我只想证明下,大多时候用指针或引用操作函数,内联将不再有效...
tjuxiaoqiang
2009-05-01
打赏
举报
回复
inline 和 virtual 可以一起使用,但一起使用时inline将失去作用,因为inline像register一样只是建议,并没有强制编译器把inline函数一定设置为内联函数。
wolflion
2009-05-01
打赏
举报
回复
根据编译器的吧。
lpf000
2009-05-01
打赏
举报
回复
用了inline的函数 复杂了 编译器不会做为内联函数
Paradin
2009-05-01
打赏
举报
回复
人也在研究见到漂亮女人就激动地具体过程
光宇广贞
2009-05-01
打赏
举报
回复
[Quote=引用 12 楼 jackzhhuang 的回复:]
和编译器有关,标准只是模糊的说——只要函数足够简单,就会被优化。所以可以肯定,函数很复杂的话,肯定不会被优化。
[/Quote]
VC里面你启用/o1选项的话,那么只要你申请inline,哪怕是一个无限迭代函数,编译器也会给你全部inline的……这个才叫真的牛X的
jackzhhuang
2009-05-01
打赏
举报
回复
和编译器有关,标准只是模糊的说——只要函数足够简单,就会被优化。所以可以肯定,函数很复杂的话,肯定不会被优化。
Jinhao
2009-05-01
打赏
举报
回复
很多人也就写写代码,不过也没写出什么名堂来,甚至有人自诩拿着C++写了百万的代码,却义无反顾地说virtual函数会影响效率,我想那种代码必定会有众多的if和switch。
自认强大的人,总有一个信条,C++的东西到头来都是内存而已,能承认的是,这人肯定用过C或汇编,但是他忽略了一样东西。人都是碳水化合物,那为啥男人见到漂亮女人就会激动,女人见到漂亮男人就会兴奋?
语言的设计并不是提供语法糖这么简单,C/Pascal对汇编来说,它描述了一种机器模型,而其他语言,比如C++/Java是描述了一种问题的模型,让你从问题的抽象中去解决问题。
加载更多回复(1)
在JavaScript中使用
inline
函数
的
问题
本文探讨了在JavaScript中使用
inline
函数
可能导致的内存泄漏
问题
,特别是在动态生成DHTML控件时,每次Render都会生成新的
函数
对象,从而浪费内存。文章提出了优化内存使用的策略,旨在减少在IE中可能出现的内存占用。
关于__attribute__( ( always_
inline
) ) __STATIC_
INLINE
定义内联
函数
的一些
问题
在从GCC移植到ARMCC编译器的过程中,遇到内联
函数
的
问题
。原
函数
使用__STATIC_
INLINE
修饰,但编译器未进行内联。添加__attribute__((always_
inline
))后,内联生效。即使不加__STATIC_
INLINE
,仅保留__attribute__((always_
inline
))也能实现内联。文章提出了三个疑问:1)为何ARMCC能识别__attribute__((always_
inline
));2)去除__attribute__((always_
inline
))后为何不再内联;3)为何不加__STATIC_
INLINE
也可内联,并寻求解答。
小
问题
大思考之C++里的
inline
函数
本文深入探讨C++中的
inline
关键字,解析其如何结合
函数
与宏的优势,实现高效代码执行的同时保持良好的封装性和可维护性。文章对比了
inline
函数
与宏的行为差异,介绍了
inline
的工作原理及编译器处理过程,并列举了使用
inline
时应注意的
问题
。
inline
内联
函数
三个
问题
本文深入探讨C++内联
函数
的三个关键
问题
:是否必须在头文件中定义、能否分离声明与实现,以及如何验证实际内联效果。重点分析跨编译单元调用时内联
函数
的可见性要求,并提供通过汇编代码、编译器警告和优化报告等手段进行验证的方法,帮助开发者正确理解和使用
inline
机制。
C++ 类声明
inline
成员
函数
和
inline
成员
函数
定义
问题
在最新的C++编译器中,将
inline
成员
函数
声明和定义分开会导致链接错误。正确的做法是将
inline
函数
在头文件中直接实现,或者不使用
inline
关键字。如果分开实现,可能会遇到‘无法链接外部符号’的
问题
。
C++ 语言
65,210
社区成员
250,514
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章