C++函数调用的解析过程(C++ primer)

理解函数调用的解析过程对于理解C++的继承至关重要,假定我们要调用p->mem()(或者obj.mem()),则依次执行以下四个步骤:

(1) 首先确定p(或obj)的静态类型,即指针或引用声明时的类型
(2) 在p(或obj)的静态类型对应的类中查找men。如果找不到,则依次在直接基类中不断查找直至达到继承链的顶端。找不到则报错
(3) 一旦找到了mem,就常规的类型检查以确认对于当前找到的mem,本次调用是否合法。
(4) 假设调用合法,编译器会根据调用的函数是否是虚函数而产生不同的代码
—如果mem是虚函数且我们是通过引用或指针进行的调用,则编译器产生的代码将会在运行时确定到底是哪个版本的函数,依据是对象的动态类型。
—反之,如果mem不是虚函数或者我们是通过对象(而非引用或指针)进行的调 用,则编译器将产生一个常规的函数调用。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值