unions相关内容

C 和 C++ 中联合的用途

我之前很舒服地使用了工会;今天,当我阅读 这篇文章并得知这段代码时,我感到很震惊 联合 ARGB{uint32_t 颜色;结构组件标签{uint8_t b;uint8_t g;uint8_t r;uint8_t一个;} 组件;} 像素;像素.color = 0xff040201;//ARGB::color 从现在开始是活跃的成员//在某处,没有对像素进行任何编辑if(pixel.componen ..
发布时间:2022-01-30 16:42:07 C/C++开发

工会和类型双关语

我已经搜索了一段时间,但找不到明确的答案. 很多人说使用联合来键入双关是未定义且不好的做法.为什么是这样?考虑到您将原始信息写入的内存不会自行更改(除非它超出堆栈范围,但这不是联合问题),我看不出它会做任何未定义的事情的任何原因,那将是糟糕的设计). 人们引用严格的别名规则,但在我看来,这就像说你不能这样做,因为你不能这样做. 如果不输入双关语,联合还有什么意义?我在某处看到它们 ..
发布时间:2022-01-30 16:19:46 C/C++开发

C++ 中的联合实际上是一个类吗?

一位初级开发人员问我是否可以为带有 POD 参数的联合重载赋值运算符,以便在将联合实例分配给该类型的变量时写入联合中的相应数据类型.我回答说我不这么认为,但随后玩弄了以下代码.令我惊讶的是,这段代码实际上已编译(在 Ubuntu 12.04 上使用 g++ 版本 4.6.3) union unMember{浮动 fData;无符号整数 uiData;unMember():uiData(0) {} ..
发布时间:2022-01-23 21:04:28 C/C++开发

可以在声明中初始化联合吗?

例如,假设我们有一个联合 typedef union {无符号长 U32;浮动 f;}U_U32_F; 当声明这个联合类型的变量时,有没有办法设置一个初始值? U_U32_F u = 0xffffffff;//不起作用...有正确的语法吗? 解决方案 使用初始化列表: U_U32_F u = { 0xffffffff }; 你可以设置除第一个成员之外的其他成员 U_U32_F u ..
发布时间:2022-01-18 23:29:35 其他开发

gcc、严格混叠和通过联合进行强制转换

你有什么恐怖故事要讲吗?GCC 手册最近添加了一条关于 -fstrict-aliasing 和通过联合强制转换指针的警告: [...] 获取地址、转换结果指针并取消引用结果具有未定义的行为 [强调添加],即使转换使用联合类型,例如: union a_union {诠释我;双 d;};诠释 f() {双 d = 3.0;返回 ((联合 a_union *)&d)->i;} 有没有人可以举 ..
发布时间:2022-01-12 23:42:25 其他开发

如果联合中只有一个成员没有,为什么联合有一个已删除的默认构造函数?

N3797::9.5/2 [class.union] 说: 如果联合的任何非静态数据成员具有非平凡的默认值构造函数(12.1),复制构造函数(12.8),移动构造函数(12.8),复制赋值运算符 (12.8)、移动赋值运算符 (12.8) 或析构函数(12.4),union对应的成员函数必须由用户提供,否则将被隐式删除 (8.4.3)联合 我试图通过示例来理解该注释: #includ ..
发布时间:2021-12-30 15:32:49 C/C++开发

具有非平凡成员的 C++11 匿名联合

我正在更新我的结构,我想向其中添加一个 std::string 成员.原始结构如下所示: 结构值{uint64_t 最后更新;联合{uint64_t ui;int64_t i;浮动 f;布尔值;};}; 当然,只是向联合添加一个 std::string 成员会导致编译错误,因为通常需要添加对象的非平凡构造函数.对于 std::string(来自informit.com 的文本) 由于 s ..
发布时间:2021-12-30 15:22:00 C/C++开发

联合中的填充是否存在

大家好, 我想知道union是否使用padding? 既然union的大小是最大的数据成员大小,那么最后可以padding吗? 解决方案 因为union的大小是最大的数据成员大小 这不一定是真的.考虑 联合垫{字符 arr[sizeof (double) + 1];双d;}; 该联合的最大成员是arr.但通常,double 会以四字节或八字节的倍数对齐(取决于double ..
发布时间:2021-12-23 17:31:42 其他开发

C 中未命名结构/联合的好处是什么?

我发现一个代码实现为如下所示的类似演示.. struct st{一个;结构{国际b;};}; 6.58 structs/unions 中未命名的 struct/union 字段 ISO C11 允许. 但是它有什么好处? 因为无论如何我都可以像 一样以相同的方式访问数据成员 int main(){结构体;s.a=11;s.b=22;返回0;} 在 gcc 4.5.2 上编 ..
发布时间:2021-12-23 17:31:34 其他开发

为什么普通变量不允许位域?

我想知道为什么位域适用于联合/结构,而不适用于像 int 或 short 这样的普通变量. 这有效: struct foo {整数栏:10;}; 但这失败了: int bar : 10;//“预期的 ';'在声明结束时" 为什么此功能仅在联合/结构中可用,而在变量中不可用?技术上不一样吗? 编辑: 如果允许,您可以创建一个具有 3 个字节的变量,而无需每次都使用 struct ..
发布时间:2021-12-23 17:21:17 其他开发

“在非结构或联合的东西中请求成员 '*******'"是什么意思?意思是?

对于这个错误的含义是否有一个简单的解释? 在非结构或联合体中请求成员“*******" 在我学习 C 的过程中,我曾多次遇到它,但我不知道它的含义. 解决方案 如果您有指针时尝试访问实例也会发生这种情况,反之亦然: struct foo{整数 x, y, z;};struct foo a, *b = &a;b.x = 12;/* 这会产生错误,应该是 b->x 或 (*b).x */ ..
发布时间:2021-12-23 17:01:31 其他开发

带有“通用初始序列"的联合“双关语"结构:为什么 C(99+)而不是 C++ 规定了“联合类型的可见声明"?

背景 关于通过 union 的类型双关的大多数非或实现定义的性质的讨论通常引用以下位,这里通过 @ecatmur ( https://stackoverflow.com/a/31557852/2757035 ),关于标准布局 struct 的豁免具有“共同初始成员类型的序列": C11(6.5.2.3 结构和联合成员;语义): [...] 如果联合包含多个共享公共初始序列的结构( ..
发布时间:2021-12-23 16:58:24 C/C++开发

为什么 C++ 不允许匿名结构?

一些 C++ 编译器允许匿名联合和结构作为标准 C++ 的扩展.这是一些偶尔非常有用的语法糖. 阻止它成为标准一部分的理由是什么?有技术障碍吗?一个哲学的?或者只是不足以证明它的合理性? 以下是我所说的示例: struct vector3 {联合{结构{浮动 x;浮动 y;浮动 z;};浮动 v[3];};}; 我的编译器会接受这个,但它警告 "nameless struct/un ..
发布时间:2021-12-23 16:51:14 C/C++开发

gcc、严格别名和通过联合进行强制转换

你有什么恐怖故事要讲吗?GCC 手册最近添加了关于 -fstrict-aliasing 和通过联合转换指针的警告: [...] 获取地址、转换结果指针并取消引用结果具有未定义行为 [强调添加],即使转换使用联合类型,例如: union a_union {国际我;双d;};int f() {双 d = 3.0;return ((union a_union *)&d)->i;} 有没有人举 ..
发布时间:2021-12-18 23:06:50 其他开发

结构中的匿名联合不在 c99 中?

这是我遇到的问题的非常简化的代码: 枚举 node_type {t_int, t_double};结构 int_node {整数值;};结构双节点{双倍价值;};结构节点{枚举 node_type 类型;联合{结构 int_node int_n;struct double_node double_n;};};int main(void) {结构 int_node i;i. 值 = 10;结构节点 ..
发布时间:2021-12-18 23:02:21 其他开发

结构和联合之间的区别

有什么好的例子可以说明 struct 和 union 之间的区别吗?基本上我知道 struct 使用其成员的所有内存,而 union 使用最大的成员内存空间.是否还有其他操作系统级别的差异? 解决方案 对于联合,您应该只使用其中一个元素,因为它们都存储在同一位置.这在您想要存储可能是多种类型之一的内容时非常有用.另一方面,结构体的每个元素都有一个单独的内存位置,它们都可以同时使用. ..
发布时间:2021-12-02 08:30:33 其他开发