社区
C++ 语言
帖子详情
inline函数的问题
blacksky3
2009-05-01 11:44:45
大家都知道inline其实是替代c里面函数宏,目的是为了减少调用的开销,但是inline具体在什么时候会变得无效,想请大家讨论下
我目前总结的是:
1.inline函数对于指针或者引用调用无效,因为只有在这种情况下编译期不能知道具体引用类型,和函数是否是virtual无关
...全文
192
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)
API hook(
inline
)超简入门代码
简单的API hook的入门用代码参考,hook目标MessageBoxW。hook形式:
inline
hook
C++基础:
inline
函数
1.
inline
函数
1.1定义:
inline
函数
由
inline
关键字定义,引入
inline
函数
的主要原因是用它替代 C 中复杂易错不易维护的宏
函数
。 1.2编译器对
inline
函数
的处理办法 编译器在编译阶段完成对
inline
函数
的...
MUI-H5 PULS混合开发视频教程
MUI是国内最主流的跨平台APP开发框架 RN是国外最主流的跨平台APP开发框架,MUI是基于webview进行渲染的,RN是基于原生组件进行渲染,从功能和体验上RN更加接近原生,但是学习难度相对比MUI来说稍微高一些
c语言
inline
函数
的总结,C++中
inline
函数
详解
本文主要记录了C++中的
inline
函数
,也就是内联
函数
,主要记录了以下几个
问题
:一、C++为什么引入
inline
函数
?主要目的:用它代替C语言中表达式形式的宏定义来解决程序中
函数
调用的效率
问题
。C语言中的宏定义:#...
为什么
inline
函数
定义在头文件.h中
答案:因为可以解决所用调用
inline
函数
的所有.c文件反复定义该
inline
函数
,
inline
函数
具有局部可见性。编译器不会生成
inline
函数
的链接符号,
inline
函数
只会直接替换代码(类似与宏)。你可以在A.c 和 B.c里重复定义...
C++ 语言
64,682
社区成员
250,490
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章