C++ Primer 关键概念

记录 C++ Primer 中的一些关键概念

关键概念:名字查找与继承

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

  • 首先确定 p(或 obj )的静态类型。因为我们调用的是一个成员,所以该类型一定是个类类型。
  • 在 p(或 obj )的静态类型对应的类中查找 mem。如果找不到,则依次在基类中不断查找直至到达继承链的顶端。如果找遍了继承链还是没有找到,则编译器报错。
  • 一旦找到 mem 就进行常规的类型检查以确认对于当前找到的 mem,本次调用是否合法。
  • 假设调用合法,则编译器将根据调用的是否为虚函数而产生不同的代码:
    —— 如果 mem 是虚函数且是我们通过指针或引用进行调用的,则编译器产生的代码将在运行时确定到底运行该虚函数的哪个版本,依据是对象的动态类型。
    —— 反之,如果 mem 不是虚函数或不是通过指针或引用调用的,则编译器将直接产生一个常规的调用。
原文地址:https://www.cnblogs.com/Codroc/p/13558260.html