gpt4 book ai didi

c++ - 在不久的将来是否有任何主流编译器可能支持 C++0x 无限制 union ?

转载 作者:可可西里 更新时间:2023-11-01 18:30:06 27 4
gpt4 key购买 nike

我一直在寻找,但似乎编译器开发人员对支持这些的兴趣为零。

对我来说,这似乎很奇怪——基本上,当前的 C++ 对 union 有一些限制,这些限制总是令人恼火而且从不合适。您可能认为基本上删除一些错误检查是勾选额外的 c++0x 支持框的一种相对简单的方法,但 AFAICT 还没有编译器开发人员这样做。

我之所以感兴趣是因为它为数据结构编码中反复出现的问题提供了一个简单的解决方案——如何为一些未知(模板参数)类型的实例保留内存,最好在情况下,但不调用恰好在该类型上定义的任何构造函数。真正重要的一点是必须遵守对齐规则。

不受限制的 union 非常适合此 - 它为您提供了一个没有构造函数或析构函数的类型,但具有允许任何成员的正确大小和对齐方式。当然有一些方法可以在需要时显式构造和析构,当您需要类型安全访问时,您只需使用适当的 union 成员来访问它。支持“适当的” union 也很有用,但即使对于单一成员的 union ,您也可以获得巨大的好处,例如...

union Memory_For_Item_t
{
Item_t m_Item;
};

即使使用 C++0x 中的标准化对齐处理功能,这种方法在方便和安全方面也胜出,例如你想要一个节点中的 x 个项目的空间,并不是所有的项目都会在任何时候被使用(或构建)。没有 C++0x,我们仍处于 WRT 对齐问题的黑暗时代——每个编译器都以自己的非标准方式处理。

不受限制的 union 的唯一问题 - 我找不到对他们的支持。

最佳答案

不久的将来?我不会指望它。作为http://wiki.apache.org/stdcxx/C%2B%2B0xCompilerSupport布局很好,尽管许多超过 C++0x 的功能正在实现,但当前的编译器都不支持它。

然而,正如 N2544 解释的那样:

The current work-around to the union limitations is to create a fake union using template programming or casts.

所以,你所描述的情况可能已经有了解决方案,尽管有点乱。

关于c++ - 在不久的将来是否有任何主流编译器可能支持 C++0x 无限制 union ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3216400/

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