博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
虚函数可不可以是内联函数
阅读量:7080 次
发布时间:2019-06-28

本文共 587 字,大约阅读时间需要 1 分钟。

内联函数不能为虚函数,原因在于虚表机制需要一个真正的函数地址,而内联函数展开以后,就不是一个函数,而是一段简单的代码(多数C++对象模型使用虚表实现多态,对此标准提供支持),可能有些内联函数会无法内联展开,而编译成为函数。

class Foo

{
public:
 virtual void vFunc() const;
private:
};

class Child: public Foo
{
public:
 virtual void vFunc() const;
};

inline
void Foo::vFunc() const
{cout<<"class Foo"<<endl;}

inline

void Child::vFunc() const
{
 cout<<"class Child"<<endl;
}

 

int main()

{
 Foo* pCh = new Child;
 pCh->vFunc();
 
 return 0;
}

 

输出为Child!即使虚函数是内联函数仍然正确的动态绑定!

原因是:即使虚函数被声明为内联函数,编译器遇到这种情况根本不会把这样的函数内联展开,而是当做普通函数来处理。

 


  构造函数肯定不能作为虚函数。虚函数是为了在继承的类里面用同样的函数名来实现RTTI的。构造函数不需要也不可能让你RTTI!(子类名不可能与父类名相同)

转载地址:http://hicml.baihongyu.com/

你可能感兴趣的文章
wampserver 的apache 配置
查看>>
ttlsa教程系列之mongodb——(四)mongodb索引&explain&profile
查看>>
flume分布式日志收集测试
查看>>
asp.net core 2.0 bundleconfig.json
查看>>
linux扩展根分区详细步骤
查看>>
监控数据库服务器的shell脚本
查看>>
Android 项目开发建议标准规范
查看>>
交换机802.1X认证配置
查看>>
苹果谷歌诺基亚50年后的LOGO会变成啥样?
查看>>
烂在肚子里的救命知识!看看吧!
查看>>
week 3
查看>>
导出的Java程序无法连接数据库的问题解决方案
查看>>
Windows Linux系统U盘制作工具
查看>>
oracle体系结构之 DB高速缓存池
查看>>
我的友情链接
查看>>
华为Agile Controller-Campus web界面admin管理员密码不对无法登陆
查看>>
遇到多个构造器参数时要考虑用构建器
查看>>
windos 8 虚拟光驱/硬盘技术
查看>>
WLC和汇聚交换机的配置
查看>>
使用python-gitlab的API V4来批量创建projects
查看>>