社区
C++ 语言
帖子详情
虚函数可以内联展开吗?
zju001
2009-04-02 05:38:59
如题
...全文
342
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++2007-09-07 09:02 1946人阅读 评论(1) 收藏 举报 当一个函数是
内联
和
虚函数
时,会发生代码替换或使用虚表调用吗? 为了弄清楚
内联
和
虚函数
,让我们将它们分开来考虑。通常,一个
内联
函数是被
展开
的。 class CFoo { private: int val; public: int GetVal() { retur
内联
函数与
虚函数
如果函数已经被声明为inline,
内联
函数已经在编译期间它的调用点上就被
展开
; 而虚拟函数调用的决定则要等到运行时刻在执行程序内部的每个调用点上系统根据被调用对象的实际基类或派生类的类型来决定选择哪一个虚拟函数实例.
内联
不是强制性的,你只是向编译器提出这个建议,允许它在可以
内联
的时候采取
内联
形式。而
虚函数
本身就是一个函数,只是在多态的情况下,它要到执行时才能确定调用的函数,所以这样的
C++ 语言
65,210
社区成员
250,514
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章