草庐IT

cascaded_union

全部标签

c++ - 如何用 0 memset 匿名 union

我应该如何将匿名union归零?我在cppreference上找不到任何内容关于它的页面。memset它最大的成员0在这里工作吗?例如-#include#includestructs{chara;charb[100];};intmain(){union{inta;sb;charc;};//b.a='a';(1)std::memset(&b,0,sizeof(b));std::cout此外,如果这行得通,我是否应该在使用memset()激活最大成员之前取消注释(1)? 最佳答案 如果你真的想尊重标准,你应该知道你写的代码是未定义的行为

C++11 空列表 union 的初始化 - 是否保证初始化 union 的全长?

在C++11中,我有以下union:unionSomeData{std::uint8_tByte;std::uint16_tWord;std::uint32_tDWord;unsignedcharString[128];};如果我这样初始化union;SomeDatadata{};是否保证union的全部内容将被“清零”?换一种方式;是union的空列表初始化器在功能上等同于将union内存设置为零?:memset(&data,0,sizeof(data));我特别关心字符串数据。我想确保字符串的整个长度都包含零。它似乎适用于我当前的编译器,但规范的语言是否保证它始终为真?如果不是:是

c++ - 命名数组元素,或 union 内的结构和数组

考虑以下结构:structVector4D{union{doublecomponents[4];struct{doublex,y,z,t;}Endpoint;};};在我看来,我在WinApi的IPAddress结构中看到了类似的东西。这个想法是让我可以通过索引和名称使用数组组件,例如:Vector4Dv;v.components[2]=3.0;ASSERT(v.Endpoint.z==3.0)//let'signoreprecisionissuesfornow在C++标准中,保证POD结构的开头没有“空白”空间,也就是说,元素x将位于Endpoint结构的开头。目前很好。但我似乎没有

c++ - 在 Cascades 和 CoreNative 这两个主要的 Blackberry Playbook C++ 框架之间,哪个更容易使用?

我是thoroughlyconfused根据BlackberryPlaybook开发中SDK/API选择的数量。对于移动应用程序开发的完整初学者,是否推荐更多?撇开Flash/Air、HTML和JAVA选项不谈,这两种原生C/C++选择中哪一种更容易上手?我认为Cascades是future,所以除非有理由不向初学者推荐它,否则我猜对于想要更快完成更多工作的人来说,这可能是“更简单”的选择。 最佳答案 看来您已经掌握了要点。Cascades是任何初学者从头开始构建原生BlackBerry10应用程序的重点所在。它为UI开发和与平台其

c++ - 什么是 union ?

最近我在windows上工作,我发现很多数据结构被定义为struct和union作为成员变量。这方面的示例是Windows中的EVT_VARIANT。我不明白这背后的目的是什么。 最佳答案 当struct包含union成员时,通常是作为一种节省空间的机制来完成的。如果struct可以是某些子类型,只有某些成员有效,那么union是不浪费空间的好方法。例如enumNumberKind{Integer,FloatingPoint};structNumber{NumberKindkind;union{intintegerValue;flo

c++ - 包含包装类型和类型本身的 union 是否有任何保证?

我可以将一个T和一个包装的T放在一个union中并根据需要检查它们吗?unionExample{Tvalue;structWrapped{Twrapped;}wrapper;};//forsimplicityT=intExampleex;ex.value=12;coutC++11标准只保证公共(public)初始序列的保存检查,但value不是struct。我猜想答案是否,因为wrappedtypesaren'tevenguaranteedtobememorycompatibletotheirunwrappedcounterpart和accessinginactivemembersis

c++ - 通过 union 合法访问 __m128 变量的字节吗?

考虑这个变量声明:union{struct{floatx,y,z,padding;}components;__m128sse;}_data;我的思路是通过x,y,z字段赋值,进行SSE2计算,通过读取结果x、y、z。不过,我有点怀疑它是否合法。我关心的是对齐:MSDN说__m128变量自动对齐到16字节边界,我想知道我的union是否可以打破这种行为。这里还有其他陷阱需要考虑吗? 最佳答案 union的对齐应该没问题,但在Windows的情况下,您可以直接访问32位组件。来自xmmintrin.h(DirectXMath):type

C++:严格别名与 union 滥用

提前为第一个可能很愚蠢的帖子道歉。虽然有很多关于这个主题的Material,但其中很少有是确定的和/或对我来说可以理解的。我有一个AlignedArray模板类,可以在堆上以任意对齐方式动态分配内存(AVX汇编例程需要32字节对齐)。这需要一些丑陋的指针操作。AgnerFog在cppexamples.zip中提供了一个示例类,它滥用union来实现这一点(http://www.agner.org/optimize/optimization_manuals.zip)。但是,我知道写入union的一个成员然后从另一个成员读取会导致UB。AFAICT将任何指针类型别名为char*是安全的,但

c++ - 包含非平凡成员 union 的类的构造函数和复制构造函数

我正在尝试实现一个自定义变体类型,它使用union来存储各种不同类型的数据。在字段type_id中我打算存储union中存储的数据是哪种类型。union包含非平凡的成员。这是我当前的实现:structMyVariant{enum{t_invalid,t_string,t_int,t_double,t_ptr,t_dictionary}type_id;union{intas_int;doubleas_double;std::stringas_string;std::unique_ptras_ptr;std::mapas_dictionary;};};我尝试创建一个MyVariant的实例

c++ - 布局兼容类型的 union

看这段代码:structA{shorts;inti;};structB{shorts;inti;};unionU{Aa;Bb;};intfn(){Uu;u.a.i=1;returnu.b.i;}是否保证fn()返回1?注意:这是this的后续问题. 最佳答案 是的,这是定义的行为。首先让我们看看标准对A和B有什么看法。[class.prop]/3有AclassSisastandard-layoutclassifit:hasnonon-staticdatamembersoftypenon-standard-layoutclass(or