问题标签 [unions]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - 在函数参数中使用联合
我最近发现有些东西可以编译(虽然不确定它是否合法)。我对这种东西的需求来自于此:我的项目为选定的拱门输出机器代码。(可能与运行程序的拱门相同,也可能不同)。所以,我现在想支持最多 64 位架构(同时也支持现有的 32 位和 16 位架构。)我目前的解决方案是 new_state 的“基础”只是一个 uint64_t,并根据需要手动转换为 16 位和 32 位. 不过,我发现您可以在函数参数中编译联合。所以编译的函数:
这种事情是否完全“合法”或受到任何其他编译器的支持?而且,我不知道如何在不创建联合然后将此联合传递给 new_state 的情况下调用此函数。
c++ - 初始化聚合联合
我有一个工会:
我想创建:
并将它们的值分别初始化为不同的类型:u1 -> int16 u2 -> float
我怎么做 ?如果上述方法不可行,是否有任何解决方法?
c++ - 奇怪的 C++ 布尔转换行为(真!=真)
只需阅读内部大学线程:
所以a
和b
都w.b
被声明为bool
。a
is assigned 1
,b
is assigned 2
,内部表示w.b
变为2
(使用 a union
)。
这样一来,所有的,将是,但和a
不会是相等b
的,所以这可能意味着宇宙被打破了()w.b
true
a
w.b
true!=true
我知道这个问题比实际问题更具理论性(清酒程序员不想更改 a 的内部表示bool
),但这里有一些问题:
- 这个可以吗?(这是用 g++ 4.3.3 测试的)我的意思是,编译器是否应该知道在布尔比较期间任何非零值都可能意味着真的?
- 您知道这种极端情况可能成为真正问题的任何情况吗?(例如,从流中加载二进制数据时)
编辑:
三件事:
bool
并且int
有不同的尺寸,没关系。但是如果我使用char
而不是int
. 还是什么时候sizeof(bool)==sizeof(int)
?如果可能,请回答我提出的两个问题。我实际上也对第二个问题的答案感兴趣,因为老实说,在嵌入式系统(可能是 8 位系统)中,这可能是一个真正的问题(或不是)。
新问题:这真的是未定义的行为吗?如果是,为什么?如果不是,为什么?规范中的布尔比较运算符没有任何假设吗?
c - C 结构/联合的可移植性问题
假设我有来自外部库的以下类型:
假设以下代码片段将在不同平台和不同编译器上按预期工作是否安全?
编辑:
按照严格的别名建议,我做了以下测试:
上面这段看似无辜的代码并不可靠:
开发商没有安宁...
c++ - 在 C++ 中获取集合的并集、交集或差集
我有几个关于如何使用 C++ 集的问题 (std::set)
有没有办法获得两个 C++ 集的并集、交集或差集?(编写自己的函数很容易做到这一点,但我想知道是否有内置函数)
C++ 集合可以用作地图中的键吗?
c++ - 为什么我的对象占用 64 个字节而不是 32 个字节?
我有一堂课是这样的:
现在我想在我的顶点缓冲区中使用这种类型,但sizeof()
并不像预期的那样。我将类对齐到 16 个字节。
sizeof(myType)
产量 64。
sizeof(myType::myType-internal_t)
产量 32。
我已经阅读了很多关于数据对齐的文章,但我不知道我在哪里使用了额外的数据。我尝试剥离自定义构造函数,但它保持不变,交换 class 关键字struct
也不会改变它(我不明白它的用途,因为它发生了!)
这很烦人,我现在将使用 internal 类型,因为我不会经常接触数据,但是让课堂像我想要的那样工作会很棒。
c++ - 四叉树和联合的问题
我有以下类似四叉树的结构,其中每个单元格可以是内部节点或叶子。如果是叶子,它可以存储颜色。如果它是一个内部节点,它存储指向四个子节点(可以是叶节点或内部节点)的指针:
如果单元格是内部节点,则不需要存储颜色。如果它是一片叶子,那么它就不需要存储指向孩子的指针。因此颜色和孩子们应该共享相同的记忆(联合)
有一个函数 split() 将叶子转换为内部节点,并为当前单元格当前具有相同颜色的子节点(叶子)创建:
现在我正在调试函数 split()。我在线上设置了一个调试点
所以现在:调试器停在这一行,我观察成员值。我做了一个过程步骤,以便执行该行(指令光标现在位于下一行)。执行完这行代码之后,children[0] 的指针值还是一样的!相反,children[2] 的指针值发生了变化(连同浮点值 b)
有人可以向我解释这种行为吗?我究竟做错了什么?
谢谢!
c++ - 记忆中的union U是什么样的?
我对 C++ 中的 Union 的整个想法感到非常困惑。这个“myUnion”在内存中是什么样子的?我知道数据共享相同的内存块,但是如何?“myUnion”的大小是多少?如果是“u5”的大小,那么这块内存中的数据是如何分配的??
c++ - C++中关于向量、联合、指针的问题
我的问题不是家庭作业问题,但我正在考虑在我的作业中使用这些概念。如果有帮助,上下文是这样的:我需要跟踪几个联合实例,它们在我自己的一个类中属于我自己的联合,作为类变量。(注意:联合实例的数量是未知的,所以我不能只拥有固定数量的联合实例。
Q1:如果我有一个联合,比如 MyUnion,以及这个联合的许多实例,我可以将它们放入一个向量中,比如
/li>Q2:有联合指针有效吗?像
/li>Q3:我正在考虑在我的实现中使用联合指针向量,这个概念是否正确?另外,它是 C++ 中的正常方法吗?我需要重新考虑我的设计吗?
c++ - 如何在 C++ 中动态创建联合实例?
我需要有几个联合实例作为类变量,那么如何在堆中创建联合实例?谢谢你