社区
C++ 语言
帖子详情
inline函数的问题
blacksky3
2009-05-01 11:44:45
大家都知道inline其实是替代c里面函数宏,目的是为了减少调用的开销,但是inline具体在什么时候会变得无效,想请大家讨论下
我目前总结的是:
1.inline函数对于指针或者引用调用无效,因为只有在这种情况下编译期不能知道具体引用类型,和函数是否是virtual无关
...全文
203
21
打赏
收藏
inline函数的问题
大家都知道inline其实是替代c里面函数宏,目的是为了减少调用的开销,但是inline具体在什么时候会变得无效,想请大家讨论下 我目前总结的是: 1.inline函数对于指针或者引用调用无效,因为只有在这种情况下编译期不能知道具体引用类型,和函数是否是virtual无关
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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)
C++基础:
inline
函数
1.
inline
函数
1.1定义:
inline
函数
由
inline
关键字定义,引入
inline
函数
的主要原因是用它替代 C 中复杂易错不易维护的宏
函数
。 1.2编译器对
inline
函数
的处理办法 编译器在编译阶段完成对
inline
函数
的处理,即对
inline
函数
的调用替换为
函数
的本体。但
inline
关键字对编译器只是一种建议,编译器可以这样去做,也可以不去做。从逻辑上来说,编译器对
inline
函数
的处理步骤一般如下: (1)将
inline
函数
体复制到
inline
..
【深入剖析C++的
inline
函数
:性能优化与常见误区】
inline
inline
函数
的定义方式与普通
函数
类似,只需在
函数
定义前加上
inline
关键字。在使用
inline
函数
时,编译器将尝试在每个调用点将
函数
的代码内联到调用处,而不是通过常规的
函数
调用机制。宏是在C++预处理阶段进行文本替换的指令。它通过#define语法定义,在编译前由预处理器进行替换。宏SQUARE(x)将在编译前被预处理器替换为,所有使用SQUARE的地方都会直接展开为对应的表达式。在类定义中,成员
函数
如果在类内定义,默认是
inline
的。
c语言
inline
函数
的总结,C++中
inline
函数
详解
本文主要记录了C++中的
inline
函数
,也就是内联
函数
,主要记录了以下几个
问题
:一、C++为什么引入
inline
函数
?主要目的:用它代替C语言中表达式形式的宏定义来解决程序中
函数
调用的效率
问题
。C语言中的宏定义:#define ExpressionName(var1,var2) (var1+var2)*(var1-var2)这种宏定义,它使用预处理器实现,没有了参数压栈、代码生成等一系列得到操作...
C++:
inline
函数
(内联
函数
)
C++:
inline
函数
(内联
函数
)1.概念2.
inline
函数
与其他方式的区别(1)
inline
函数
和普通
函数
处理的区别(1.1)普通
函数
(1.2)
inline
函数
(2)
inline
函数
和宏的区别(1.1)宏(1.2)
inline
函数
(3)
inline
函数
和static修饰的
函数
的区别(1.1)static
函数
(1.2)
inline
函数
3.
inline
函数
的建议(1)什么时候使用
inline
函数
(2)什么时候不使用
inline
函数
4.
inline
函数
的注意事项 1.概念 以
inline
修饰的
函数
叫做内联
为什么
inline
函数
定义在头文件.h中
答案:因为可以解决所用调用
inline
函数
的所有.c文件反复定义该
inline
函数
,
inline
函数
具有局部可见性。编译器不会生成
inline
函数
的链接符号,
inline
函数
只会直接替换代码(类似与宏)。你可以在A.c 和 B.c里重复定义一个
inline
void func()
函数
给A.c和B.c用。相反,如果非
inline
函数
定义在.h中。如果非
inline
函数
,是在.h中声明,在.c中定义。一、是不是
Inline
函数
只能定义在.h中?而
inline
函数
在.h中定义。
C++ 语言
65,186
社区成员
250,526
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章