gpt4 book ai didi

c++ - 派生对象数组到基础对象数组

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:42:27 25 4
gpt4 key购买 nike

有多个问题与这个问题非常相似,不同之处在于 sizeof(Base) != sizeof(Derived)。由于显而易见的原因,这将不起作用(应用于指针的下标运算符是相对于指针大小,而不是实际的底层类型)。但是,我想知道这段代码是否正确:

struct Base
{
int Data;
};
struct Derived : public Base
{
};
int main()
{
static_assert(sizeof(Base) == sizeof(Derived), "Sizes are not equal");

Derived Data[10];
Base* Ptr = Data;
Ptr[3].Data = 5;
}

显然,Ptr[3] 不会再访问任何半撕裂的 Base 实例,因为大小相等,但代码是否仍然正确?

最佳答案

是的,这是正确的(在明确定义的意义上,不一定是理智的)因为这两个类是布局兼容的 - 它们是具有相同非静态数据的标准布局结构成员。

虽然它非常脆弱;对类的小改动可能会破坏兼容性并产生未定义的行为。

关于c++ - 派生对象数组到基础对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26527937/

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