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

来源:互联网 发布:淘宝客在哪里参加 编辑:程序博客网 时间:2024/06/05 16:21

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

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

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

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