gpt4 book ai didi

c++ - 没有任何附加数据成员的派生类的大小

转载 作者:搜寻专家 更新时间:2023-10-31 02:02:11 25 4
gpt4 key购买 nike

当使用 C 库时,从 C 结构派生一个类并添加一些方法来在没有任何数据成员的情况下对其进行操作可能是合适的。 F.e.您可以添加一个构造函数来更方便地初始化成员。因此,此对象可能会隐式向上转换并传递给 C-API。

在某些情况下,API 需要一个 C 结构数组。但是,C++ 语言是否可以保证派生对象具有与基本结构相同的大小,以便对象之间的距离适当偏移?

顺便说一句:类似问题的建议都不符合我的问题。

最佳答案

一般来说,没有这样的保证。特别是,如果您引入虚拟成员函数,那么通常会有额外的内存用于虚拟表指针。

如果我们添加一个额外的假设,即派生类是标准布局,并且不使用“打包”等非标准功能,那么实际大小将是相同的。

但是,即使大小相同,从技术上讲,您也不能假装派生类型的数组是基类型的数组。特别是,使用指向 base 的指针迭代“假装”数组将具有未定义的行为。至少在 C++ 中是这样。这些操作大概是通过 API 在 C 中执行的。我真的不知道在那种情况下有什么保证。


我会建议,如果您需要处理 C 结构的数组(即指针将由 API 递增或下标),那么不要包装单个结构,而是创建一个 C++整个数组的包装器。

关于c++ - 没有任何附加数据成员的派生类的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57792947/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com