当前位置: 首页 > news >正文

虚函数可不可以是内联函数

内联函数不能为虚函数,原因在于虚表机制需要一个真正的函数地址,而内联函数展开以后,就不是一个函数,而是一段简单的代码(多数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!(子类名不可能与父类名相同)

相关文章:

  • 用JS实现人脑和计算机交互,这个厉害了
  • 翻硬币
  • How cc Works 中文译文
  • 如何优雅地查看 JS 错误堆栈?
  • [转]IPTABLES中SNAT和MASQUERADE的区别
  • PaddlePaddle-GitHub的正确打开姿势
  • Codeforces 1097 Alex and a TV Show
  • 第八届(2018)CSR年度盛典在北京举办
  • 身残心不残 河北大城63岁独身老人捐献遗体
  • Spring Batch JSON 支持
  • settings配置数据库和日志
  • K-means 怎么选 K ?
  • 蚂蚁金服庆涛:OceanBase支撑2135亿成交额背后的技术原理
  • Electron构建跨平台应用Mac/Windows/Linux
  • 每个 JavaScript 开发者都该了解的 ES2018 新特性
  • 【知识碎片】第三方登录弹窗效果
  • 77. Combinations
  • Akka系列(七):Actor持久化之Akka persistence
  • Java小白进阶笔记(3)-初级面向对象
  • JS题目及答案整理
  • php面试题 汇集2
  • PHP面试之三:MySQL数据库
  • Python - 闭包Closure
  • Redux系列x:源码分析
  • SpringCloud集成分布式事务LCN (一)
  • Sublime Text 2/3 绑定Eclipse快捷键
  • use Google search engine
  • vue 个人积累(使用工具,组件)
  • 仿天猫超市收藏抛物线动画工具库
  • 工作中总结前端开发流程--vue项目
  • 前端攻城师
  • 我与Jetbrains的这些年
  • 小程序 setData 学问多
  • [Shell 脚本] 备份网站文件至OSS服务(纯shell脚本无sdk) ...
  • 阿里云重庆大学大数据训练营落地分享
  • 如何通过报表单元格右键控制报表跳转到不同链接地址 ...
  • (1)Android开发优化---------UI优化
  • (12)Hive调优——count distinct去重优化
  • (31)对象的克隆
  • (4)通过调用hadoop的java api实现本地文件上传到hadoop文件系统上
  • (delphi11最新学习资料) Object Pascal 学习笔记---第7章第3节(封装和窗体)
  • (Oracle)SQL优化技巧(一):分页查询
  • (附源码)springboot教学评价 毕业设计 641310
  • (附源码)ssm智慧社区管理系统 毕业设计 101635
  • (免费领源码)Java#Springboot#mysql农产品销售管理系统47627-计算机毕业设计项目选题推荐
  • (四)模仿学习-完成后台管理页面查询
  • (一)ClickHouse 中的 `MaterializedMySQL` 数据库引擎的使用方法、设置、特性和限制。
  • (转)Java socket中关闭IO流后,发生什么事?(以关闭输出流为例) .
  • (转)memcache、redis缓存
  • .cn根服务器被攻击之后
  • .NET Core WebAPI中使用Log4net 日志级别分类并记录到数据库
  • .NET Core 成都线下面基会拉开序幕
  • .NET Core 控制台程序读 appsettings.json 、注依赖、配日志、设 IOptions
  • .NET delegate 委托 、 Event 事件,接口回调
  • .NET成年了,然后呢?