C++ 对象模型不包含任何非虚拟成员函数表。当有这样一个函数的调用时
a.my_function();
通过名称修改,它变成了类似的东西
my_function__5AclassKd(&a)
对象只包含数据成员。没有用于非虚函数的表。那么在这种情况下调用机制如何找出调用哪个函数呢? 引擎盖下发生了什么?
最佳答案
从形式上讲,标准不要求它们以任何特定方式工作,但通常它们的工作方式与普通函数完全一样,但有一个额外的不可见参数:指向调用它们的对象实例的指针。
当然,编译器可能能够优化它,例如如果成员函数不使用 this
或任何需要 this
的成员变量或成员函数,则不要传递指针。
关于c++ - C++调用非虚成员函数的机制是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48589312/