社区
C++ 语言
帖子详情
虚函数可以内联展开吗?
zju001
2009-04-02 05:38:59
如题
...全文
344
20
打赏
收藏
虚函数可以内联展开吗?
如题
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
20 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
zju001
2009-04-03
打赏
举报
回复
虚函数有时候可以内联,有时候不可以..要看用户是怎么调用虚函数的.
*如果用户使用指针或者引用调用虚函数,就一定不能内联展开.
*其它情况,如使用对象去调用,或使用::作用域操作符限定.就可以内联展开.
如下例子:
Class aa;
Class *pa = &aa;
Class &ra = aa;
aa.func(); // 可以展开
pa->func(); // 不可以展开
ra.func(); // 不可以展开
pa->Class::func(); // 可以展开
wangyadong
2009-04-03
打赏
举报
回复
int b=0
Jarrys
2009-04-03
打赏
举报
回复
即使vertual函数使用inline,编译器也会强制变成非内联函数
biosli
2009-04-03
打赏
举报
回复
vertual函数不能inline,vertual是用指针去找函数,inline是代码拷贝(有点类似与define)
alwang_2008
2009-04-03
打赏
举报
回复
inline 只是建议,若加了virtual ,我的理解是编译器会选择的,有时候用inline,有时候用virtual。好像《inside C++ object model》是这样说的
zju001
2009-04-03
打赏
举报
回复
[Quote=引用 10 楼 once_and_again 的回复:]
有几个函数不能inline吧?
比如 构造?
[/Quote]
构造函数为啥不能内联?
我觉得任何比较短小的函数都可以内联.当然除了非常长的,递归的.
Jarrys
2009-04-03
打赏
举报
回复
[Quote=引用 6 楼 zju001 的回复:]
写在CPP里的函数一定不能内联吗?即使加了inline关键词?
换句话说,要内联,一定要把函数定义写在.H文件中吗?
[/Quote]
期待中
sdljgxb
2009-04-03
打赏
举报
回复
内联是一个建议 而不一定被执行
fibbery
2009-04-03
打赏
举报
回复
内联函数需要在编译时确定的,也就是内联是编译时的行为,虚函数是实现多态的基础,也就是应用在运行时的概念,所以,虚函数是不能够内联的。
once_and_again
2009-04-03
打赏
举报
回复
有几个函数不能inline吧?
比如 构造?
wohow
2009-04-03
打赏
举报
回复
内联只是对编译器的“建议”,编译器可以根据具体情况接受或拒绝该建议。但是虚函数是C++定义,具有强制性,编译器必须实现多态。
现在的各个系统上面对于函数调用的开销非常小,小到可以忽略不计的地步,所以除非非常频繁的调用一些小函数(例如次数比较大的循环中),才考虑内联函数带来的性能提升,否则花点时间优化一下代码都比“inline”强的多
taoyanxu1989
2009-04-03
打赏
举报
回复
[Quote=引用 19 楼 zju001 的回复:]
虚函数有时候可以内联,有时候不可以..要看用户是怎么调用虚函数的.
*如果用户使用指针或者引用调用虚函数,就一定不能内联展开.
*其它情况,如使用对象去调用,或使用::作用域操作符限定.就可以内联展开.
如下例子:
Class aa;
Class *pa = &aa;
Class &ra = aa;
aa.func(); // 可以展开
pa->func(); // 不可以展开
ra.func(); // 不可以展开
pa->Class::func(); // 可以展开
[/Quote]
很详细了 学习
nullah
2009-04-02
打赏
举报
回复
[Quote=引用 6 楼 zju001 的回复:]
写在CPP里的函数一定不能内联吗?即使加了inline关键词?
换句话说,要内联,一定要把函数定义写在.H文件中吗?
[/Quote]
文章里没这样说吧
yin8086
2009-04-02
打赏
举报
回复
内联只是对系统的一个建议,一旦你把它变成虚函数,系统肯定不会内联它
zju001
2009-04-02
打赏
举报
回复
写在CPP里的函数一定不能内联吗?即使加了inline关键词?
换句话说,要内联,一定要把函数定义写在.H文件中吗?
nullah
2009-04-02
打赏
举报
回复
看了下,不过觉得没多大意义的,这样编译器会取消内联
没必要非得把实现写在cpp文件中...
反而写在.H文件中更直观些~~
fairchild811
2009-04-02
打赏
举报
回复
up上面的。
我们得出的结论是:最好不要使用内联虚函数,因为它们几乎不会被展开,即便你的函数只有一行,你最好还是将它与其它的类函数一起放在模块(cpp文件)中。当然,开发者常常将简短的虚函数放在类声明中-不是因为他们希望这个函数被展开为内联,而是因为这样做更方便和可读性更强。
nullah
2009-04-02
打赏
举报
回复
[Quote=引用 2 楼 lingyin55 的回复:]
参考这篇文章吧
http://blog.csdn.net/hedylin/archive/2007/09/07/1775556.aspx
[/Quote]
学习~~
lingyin55
2009-04-02
打赏
举报
回复
参考这篇文章吧
http://blog.csdn.net/hedylin/archive/2007/09/07/1775556.aspx
wohow
2009-04-02
打赏
举报
回复
内联是编译时的代码复制,而虚函数是运行时才能找到函数入口,所以无论多么简单,虚函数都不能内联
虚函数
可以是
内联
函数吗?
本文探讨了
虚函数
和
内联
函数在C++中的实现机制。
虚函数
通过
虚函数
表在运行时确定调用,而
内联
函数在编译时
展开
,减少调用开销。文章还解释了
虚函数
可以是
内联
函数,并提供了示例代码,展示了如何调用
内联
虚函数
。
C++如何处理
内联
虚函数
本文探讨了C++中
内联
虚函数
的工作原理及其实现细节,包括编译器如何处理
内联
虚函数
调用,以及在何种情况下
内联
虚函数
会被
展开
。
内联
函数与
虚函数
本文探讨了
内联
函数与
虚函数
的区别。
内联
函数在编译时
展开
,提高执行效率;
虚函数
则用于实现多态,运行时确定具体调用。文章还提到,在静态调用情况下,
虚函数
仍可能被
内联
。
C++ 语言
65,211
社区成员
250,514
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章