为了账号安全,请及时绑定邮箱和手机立即绑定

内联虚拟功能真的没有意义吗?

内联虚拟功能真的没有意义吗?

C
慕雪6442864 2019-11-14 14:10:31
内联虚拟功能真的没有意义吗?当我收到代码评论评论说虚拟功能不需要内联时,我收到了这个问题。我认为在直接在对象上调用函数的场景中,内联虚函数可以派上用场。但是我想到的反驳论点是 - 为什么要想定义虚拟然后使用对象来调用方法呢?最好不要使用内联虚拟功能,因为它们几乎从未扩展过吗?我用于分析的代码片段:class Temp{public:     virtual ~Temp()     {     }     virtual void myVirtualFunction() const     {         cout<<"Temp::myVirtualFunction"<<endl;     }};class TempDerived : public Temp{public:     void myVirtualFunction() const     {         cout<<"TempDerived::myVirtualFunction"<<endl;     }};int main(void) {     TempDerived aDerivedObj;     //Compiler thinks it's safe to expand the virtual functions     aDerivedObj.myVirtualFunction();     //type of object Temp points to is always known;     //does compiler still expand virtual functions?     //I doubt compiler would be this much intelligent!     Temp* pTemp = &aDerivedObj;     pTemp->myVirtualFunction();     return 0;}
查看完整描述

3 回答

?
DIEA

TA贡献1820条经验 获得超2个赞

有时可以内联虚函数。优秀的C ++ faq的摘录:

“内联虚拟调用唯一可以内联的是编译器知道作为虚函数调用目标的对象的”确切类“。这只有在编译器具有实际对象而不是指针时才会发生。引用一个对象。即,使用本地对象,全局/静态对象或复合内部的完全包含的对象。“



查看完整回答
反对 回复 2019-11-16
  • 3 回答
  • 0 关注
  • 387 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信