【发布时间】:2015-12-24 03:15:20
【问题描述】:
我想我对类数据成员及其在内存中的表示有一个清晰的了解:
类的成员定义了对象的布局:数据成员一个接一个地存储在内存中。使用继承时,派生类的数据成员只是添加到基类的数据成员中。
但是,当我试图弄清楚对象的 “蓝图” 是如何被其函数成员使用附加语法元素修改时:我遇到了困难。在下面的文本中,我试图列出所有有问题的1 函数成员语法,这些语法使我难以弄清楚对象的内存大小和结构。
我想不通的类成员函数:
- 函数类型:
lambda,函数指针,正在修改,不可修改。 - 包含额外的语法元素:
friend(with non-member)、virtual、final、override、static、const、volatile、mutable。
问题:
在对象内存布局的上下文中,具有不同说明符的成员函数之间有什么区别以及它们如何影响它?
注意:
我已经阅读了this 和this,它们并没有提供令人满意的答案2。 This 谈论一般情况(我理解),这是最接近重复的情况。(但我特别关注有问题的语法列表,这是我的实际问题,没有涉及到。)
1.在影响对象内存布局方面。
2。第一个是关于 GCC 编译器,第二个提供了指向 @m@zon 上一本书的链接。
【问题讨论】:
-
成员函数不影响对象布局。访问修饰符不影响对象布局。静态成员不是对象的一部分,它们是类的一部分。
-
@simplicisveritatis
virtual是唯一可能影响类内存布局的修饰符。 -
对象不知道这一点。这一切都在编译时处理。
-
是的,它们是非常相似的概念。
-
没错。 C++ 类基本上类似于 C 结构。除了虚成员函数之外的所有内容都在编译器中处理,方法是限制可以引用名称的位置,并对成员函数和重载进行名称修改。
标签: c++ member-functions object-layout