成员函数的附加 syntax/specifiers 如何影响 类 中的内存布局?

How member functions' additional syntax/specifiers affect memory layout in classes?

我想我对 class 数据成员及其在内存中的表示有清楚的了解:

The members of a class define the layout of objects: data members are stored one after another in memory. When inheritance is used, the data members of the derived class are just added to those of a base.

但是,当我试图弄清楚一个对象的 "blueprint" 是如何被它的函数成员用额外的语法元素修改时:我遇到了困难.在下面的文字中,我试图列出所有有问题的1函数成员语法,这些语法让我很难弄清楚对象内存大小和结构。

Class个想不通的成员函数:

问题:

在对象内存布局的上下文中,具有不同说明符的成员函数之间有什么区别以及它们如何影响它?


注:

我已经读过 and this, which does not provide an satisfying answer2. This关于一般情况的讨论(我理解),这是最接近重复的。(但我特别关注有问题的语法列表,这是我的实际问题那里没有涵盖。)

1.在影响对象内存布局方面。

2。第一个是谈论 GCC 编译器,第二个是在@m@zon 上的一本书中提供 link。

成员函数不是对象内存布局的一部分。唯一可归因于成员函数的是对用于执行动态分派的实现定义结构的隐藏引用,例如 virtual method table。仅当对象具有至少一个虚拟成员函数时,才会将此引用添加到您的对象,因此 class 没有虚拟函数的对象免于此开销。

回到你的具体问题,对对象的内存布局有任何影响的成员函数的唯一修饰符是virtual*。其他修饰符会影响函数本身的解释方式,但不会更改对象的内存布局。

* override关键字也表示基类class中存在虚成员函数,但它是可选的;添加或删除它不会改变对象的内存布局。