gpt4 book ai didi

C++ 理解 union 和结构

转载 作者:行者123 更新时间:2023-11-30 00:49:59 27 4
gpt4 key购买 nike

我开始从事一个正在进行的项目,其中一些 union 定义如下:

/* header.h */
typedef union my_union_t {
float data[4];
struct {
float varA;
float varB;
float varC;
float varD;
};
} my_union;

如果我理解的好,union是为了节省空间,所以里面的变量的sizeof(my_union_t) = MAX。使用上面的语句而不是这个语句的优点是什么:

typedef struct my_struct {
float varA;
float varB;
float varC;
float varD;
};

分配给他们的空间不会一样吗?

我如何从 my_union 初始化 varA、varB...?

最佳答案

在实现类似对象的变体(类型字段和数据类型的 union )或实现序列化时,通常会使用 union 。

您使用 union 的方式会导致灾难。

您假设 union 中的 struct 正在打包 float,两者之间没有间隙!该标准保证 float data[4]; 是连续的,但不是结构元素。您唯一知道的另一件事是 varA 的地址;与data[0]的地址相同。

切勿以这种方式使用 union 。

至于您的问题:“我如何从 my_union 初始化 varA、varB...?”。答案是,通过 data[] 数组以正常的冗长方式访问结构成员而不是

关于C++ 理解 union 和结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26522559/

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