c++函数调用到底是如何编译的!

c++函数调用到底是如何编译的!

总结一下c++本地函数调用的编译过程,暂不考虑外部函数调用的编译过程,那些涉及到链接的知识。

  1. 遇到函数调用语句
  2. 解析出函数的名字
  3. 解析出函数调用的参数信息(参数个数和类型)
  4. 开始根据名称查找函数定义,查找的过程是由内而外的,包括从内部作用域到外部作用域;从内层的命名空间到外层的命名空间;从子类到父类。查找的原则是找到同名函数定义后停下,不再向外层查找,而是在停下的层次中找到所有的同名函数定义,即为候选函数集
  5. 在候选函数集中根据函数调用的参数信息来找出可选函数集,即可以通过直接匹配,类型隐式变换,模板参数特化等方式完成参数匹配的函数。
  6. 根据重载协议,在可选函数集中找出最优函数
  7. 如果最优函数不是虚函数,则完成静态绑定。否则完成动态绑定(即根据对应虚表项在运行时确定函数地址).

以上的过程基本上包括了函数重载覆盖隐藏虚函数。如有错误,请指正.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值