没有成员函数的结构的继承
Inheritance of structs without member functions
这个问题很可能是"C++标准说什么",但我在谷歌上的搜索并没有给我想要的答案。
我知道,当你有类,并且一个类从另一个类继承时,你就会进入虚拟函数表的世界,因为代码需要弄清楚哪个类包含你试图调用的函数。
但是,只包含数据的结构之间的继承呢?例如,如果您有一个小部件结构,然后您想要该结构的专用版本,该版本包含一些额外的变量,但您仍然希望能够将其原始数据传递给处理小部件的函数,那么从原始小部件结构继承比使代码处理两种类型的小部件结构更简单。当继承中只涉及数据时,是否有任何开销?专用小部件仍然是一个简单的结构(就内存布局而言),两个数据都组合在一起,还是原始小部件数据与新数据分开存储?
最终,我希望保持数据的简单性和连续性,就像基本结构一样,我不知道继承数据是否会打破这一点。
在C++内存模型中,对象总是布置在连续内存中。如果希望拥有非连续内存,则需要使用指向该对象外部数据的成员。也就是说,如果继承任何类,无论它是结构还是具有虚拟函数,实际对象总是连续的。关于可能感兴趣的类型,几乎没有其他含义:如果类是标准布局类型,则可以例如memcpy()
对象。我不确定C++2011对继承和标准布局类型有什么看法,但我很确定C++2003不允许继承,C++2011允许继承。
要知道,当你有类,并且一个类从另一个类继承时,你就会进入虚拟函数表的世界
只有当你有虚拟功能。。。
因此,为了回答您的问题:如果您有一个没有成员函数的普通struct
,那么编译器将不会生成虚拟函数表。
顺便说一句,你不应该担心,这个表是每个类的,每个实例只需要一个简单的额外指针(如果你使用简单的继承)。
相关文章:
- 为什么除了继承聚合结构之外,结构为空,无法聚合初始化?
- 将继承的结构传递给 poll()
- 继承层次结构并将元素添加到向量
- 为什么继承的结构成员在联合中无法访问?
- 继承C++中的结构
- 该结构继承的类型是什么
- C 结构继承
- 从C结构继承的可能兼容性问题
- 友元结构继承类时不可访问
- c++从模板结构继承
- 结构继承自身
- 重写从 c 结构继承的函数
- Cython中的C++结构继承
- 如果结构继承,则无法使用初始值设定项列表初始化结构?
- 如何定义从结构继承的静态变量
- 结构继承层次结构-动态下转换
- 从POD结构继承的类中默认构造函数的奇怪行为
- 用结构继承作为参数重载函数
- 结构继承和初始化基类
- C++ POD 结构继承?是否有任何关于派生成员的内存布局的保证