问题标签 [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++ - C/C++ 中联合的大小
C/C++ 中联合的大小是多少?它是里面最大数据类型的大小吗?如果是这样,如果联合的较小数据类型之一处于活动状态,编译器如何计算如何移动堆栈指针?
c++ - 是否可以将多个对象放在一个联合中?
如果我有这个怎么办:
当然,我将只使用 3 个向量中的一个。但是......当所有 3 个向量都被构造时会发生什么?
3个向量的构造函数会相互干扰吗?(因为它们3在同一个内存地址中)
谢谢。
c# - C# 相当于 C 联合
是否有与 C union typedef 等效的 C#?C# 中以下内容的等价物是什么?
c++ - 如何访问工会的内部成员?
我有一个定义如下的工会:
如何从我的代码中访问 INTERNAL_STRUCTURE 的成员?
我以为我可以这样做:
我错了。我可以看到联合中的枚举,但没有别的。有人可以向我解释这种类型的结构(或好处)吗?
c++ - 工会——无用的时代错误还是有用的老派把戏?
我最近在当地图书馆的一次图书特卖会上看到了一本很棒的数据结构书,“ Data Structures Using C ”(c)1991,仅售 2 美元。正如书名所暗示的,本书涵盖了使用 C 编程语言的数据结构。
我知道这本书会过时,但可能包含许多我在其他地方不会遇到的高级 C 主题。
果然在 5 分钟内我发现了一些我不知道的关于 C 的东西。我遇到了一个讨论union
关键字的部分,我意识到我从未使用过它,也从未见过任何代码。我很感激能学到一些有趣的东西,很快就买了这本书。
对于那些不了解工会是什么的人,本书使用了一个很好的比喻来解释:
要完全理解联合的概念,有必要检查它的实现。结构可以被视为通往内存区域的路线图。它定义了如何解释内存。一个联合为同一内存区域提供了几个不同的路线图,程序员有责任确定当前使用哪个路线图。在实践中,编译器会分配足够的存储空间来包含最大的联合成员。然而,路线图决定了如何解释存储。
我可以很容易地想出我会使用联合的人为情况或技巧。(但我对人为的情况或黑客不感兴趣......)
您是否使用或看到过使用 Union 解决问题的实现**比不使用 Union 更优雅**?
如果您快速解释为什么使用联合比不使用联合更好/更容易,则会获得额外奖励。
c - 联合元素对齐
如果我有一个联合,C 标准保证联合本身将与最大元素的大小对齐。
但是它对联合内部单个联合元素的对齐有什么看法呢?下面的表达式是否保证为真?
c - 联合和结构包装问题
我正在编写一些软件,其中每一位都必须准确(它用于 CPU),所以 __packed 非常重要。
那是我的结构和联合。但是它不起作用:
应该创建相同的 uint32。但他们不会创造同样的东西。
我的工会有什么我看不到的地方吗?
c++ - MSVC:联合与类/结构与内联友元运算符
这段代码在 GCC 3.x 和 4.x 上按预期编译和运行:
但是,MSVC 不会编译该代码,并抱怨:
哪个编译器是正确的?如何解决?我试图在保持可移植性、灵活性和自记录代码的同时实现干净的代码(没有外部朋友方法)。
一些注意事项:
- 这是一个显示问题的测试用例,原始数据类型更加复杂和精心设计,尽管在 MSVC 中不起作用(主编译器是 GCC,但也需要 MSVC 兼容性)。
- 在联合声明的开头添加 'public:' 并不能解决它。
- 在每个运营商不解决它之前添加 'public:'
- 将测试用例转换为结构/类确实可以解决它,但这是不希望的(请不要发火,我有理由。其中大多数是 C++ 语言的限制)
- 运算符方法将保留在全局范围内(不是成员函数)
出于美学原因(超过 24 种不同的运算符和操作数组合),最佳解决方案不会依赖于将声明移到联合定义之外,但如果没有其他解决方案,则会这样做。
c# - 如何在 C# 中模拟 C++ 联合?
LayoutKind.Explicit
我对具有属性集的结构有一个小问题。struct
如您所见,我声明了fieldTotal
64 位,fieldFirst
即前 32 个字节和fieldSecond
后 32 个字节。在将fieldfirst
and设置fieldSecond
为之后Int32.MaxValue
,我希望fieldTotal
是Int64.MaxValue
,但实际上并没有发生。为什么是这样?我知道 C# 并不真正支持 C++ 联合,也许它只会在互操作时很好地读取值,但是当我们尝试自己设置值时,它根本就不能很好地处理它?
c# - (.net) .net 显式结构和 c++ 联合之间有什么内在区别吗?
就是那个问题。有什么你可以用 c++ unions 做而你不能用 c# Explicit structs 做的事情吗?