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

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

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

猜你喜欢

转载自blog.csdn.net/zy47675676/article/details/89035962