c++函数调用到底是如何编译的!
来源:互联网 发布:淘宝客在哪里参加 编辑:程序博客网 时间:2024/06/05 16:21
c++函数调用到底是如何编译的!
总结一下c++本地函数调用的编译过程,暂不考虑外部函数调用的编译过程,那些涉及到链接的知识。
- 遇到函数调用语句
- 解析出函数的名字
- 解析出函数调用的参数信息(参数个数和类型)
- 开始根据名称查找函数定义,查找的过程是由内而外的,包括从内部作用域到外部作用域;从内层的命名空间到外层的命名空间;从子类到父类。查找的原则是找到同名函数定义后停下,不再向外层查找,而是在停下的层次中找到所有的同名函数定义,即为候选函数集
- 在候选函数集中根据函数调用的参数信息来找出可选函数集,即可以通过直接匹配,类型隐式变换,模板参数特化等方式完成参数匹配的函数。
- 根据重载协议,在可选函数集中找出最优函数
- 如果最优函数不是虚函数,则完成静态绑定。否则完成动态绑定(即根据对应虚表项在运行时确定函数地址).
以上的过程基本上包括了函数重载,覆盖,隐藏,虚函数。如有错误,请指正.
阅读全文
0 0
- c++函数调用到底是如何编译的!
- 函数是如何调用的
- C/C++: 函数调用, 栈的大小是如何被确定的
- main函数是如何被调用的
- 内核是如何调用OEMInterruptHandler函数的?
- 函数调用是如何在系统中实现的-以C为例
- Unix编程学习笔记--------系统调用的疑问????? 到底什么是系统调用???? 系统调用是如何实现的???
- 函数调用过程中栈到底是怎么压入和弹出的?
- LayoutInflater到底是如何工作的
- setTimeout到底是如何执行的
- Spring MVC 到底是如何工作的?
- 你到底是如何上网的
- Spring MVC 到底是如何工作的?
- Spring MVC 到底是如何工作的?
- 构造函数到底是干什么的?
- 函数调用时堆栈是如何分配的
- 动态链接如何确定是调用的哪一个函数
- 驱动中suspend函数是如何被调用到的。
- Android 显示和隐藏软键盘_亲测有效
- 637. Average of Levels in Binary Tree
- Hibernate分页
- SLAM的扫盲文章收集
- UGUI ScrollRect滑动居中CenterOnChild实现(修改)
- c++函数调用到底是如何编译的!
- js闭包
- AB1601 PWM模块
- Selenium环境搭建,谷歌浏览器遇到的问题
- 关于@transactional注解的用处与意义
- CSS选择器
- jdbcTemplate返回自定义Bean的列表
- WebView打不开或者显示异常可能原因
- 互为旋转词