c++ - C++调用非虚成员函数的机制是什么?

标签 c++ function member-functions function-call

C++ 对象模型不包含任何非虚拟成员函数表。当有这样一个函数的调用时

a.my_function();

通过名称修改,它变成了类似的东西

my_function__5AclassKd(&a)

对象只包含数据成员。没有用于非虚函数的表。那么在这种情况下调用机制如何找出调用哪个函数呢? 引擎盖下发生了什么?

最佳答案

从形式上讲,标准不要求它们以任何特定方式工作,但通常它们的工作方式与普通函数完全一样,但有一个额外的不可见参数:指向调用它们的对象实例的指针。

当然,编译器可能能够优化它,例如如果成员函数不使用 this 或任何需要 this 的成员变量或成员函数,则不要传递指针。

关于c++ - C++调用非虚成员函数的机制是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48589312/

相关文章:

c++ - const 成员函数不允许什么?

c++ - 在声明它的方法内部初始化静态 std::multimap

c++ - 两个宏之间重复运算的效率

javascript - 如何使用特定键 Deep 键将所有值从 JSON 对象放入数组

function - 该函数未定义 : IF (Emacs Lisp)

c++ - 类/成员函数错误

c++ - 具有已定义宏的 iOS 预处理条件导致 "token is not valid"

c++ - noexcept 一个函数返回一个具有抛出析构函数的类

c - 二元一次方程不能正常工作

c++ - 定义第二个静态成员函数的异常错误消息?