草庐IT

UNION-ed

全部标签

c++ - 这是 GCC 错误吗?使用 union 初始化结构

我可能发现了GCCv4.8.2的错误,但我想在提交之前先检查一下,因为这可能是我做错了什么!以下代码:#includestructMessage{typedefunion{charbyte;constchar*str;}Parameter;Parameterp1;Parameterp2;};intmain(){std::vectormessages_;messages_.push_back({{.byte='a'}});Messagemessage={{.byte='a'},{.str="HelloWorld"}};messages_.push_back(message);messag

java - Thrift Java 客户端无法正确处理 union

死的简单Thrift联盟的例子。环境:最新的thrift,cpp作为服务器,java作为客户端mytest.thrift:namespacejavacom.wilbeibi.thriftunionValue{1:i16i16_v,2:stringstr_v,}structBox{1:Valuevalue;}serviceMyTest{BoxechoUnion(1:i32number);}C++服务器代码:#include"MyTest.h"#include#include#include#includeusingnamespace::apache::thrift;usingnamesp

c++ - 是什么让 union 成员(member)活跃起来?

是什么让union成员活跃起来?我已经阅读了C++14标准的第9.5章(关于union的那一章),但是对于什么使union成员活跃,我还没有找到明确的答案。有一个注释:Ingeneral,onemustuseexplicitdestructorcallsandplacementnewoperatorstochangetheactivememberofaunion.例如,unionU{inti;shorts;}u;new(&u.i)int(42);好的,placementnew改变了activemember,很清楚了。但是在处理具有普通构造函数的类型时,我们通常不使用placementn

c++ - 使用 union 的一个字段的地址访问另一个字段是否合法?

考虑以下代码:unionU{inta;floatb;};intmain(){Uu;int*p=&u.a;*(float*)p=1.0f;//我们都知道union字段的地址通常是相同的,但我不确定这样做是否是明确定义的行为。因此,问题是:像上面的代码一样强制转换和取消引用指向union字段的指针是否合法且定义明确的行为?附言我知道它更像是C语言而不是C++,但我想了解它在C++中是否合法,而不是C。 最佳答案 联盟的所有成员必须位于同一地址,这是标准所保证的。您正在做的确实是明确定义的行为,但应该注意的是,您不能使用相同的方法从uni

c++ - c++11 中的模板化 union

c++11标准对模板化union有什么规定吗?(我在http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3242.pdf中找不到任何内容,但我没有仔细阅读。)我有templateunionu{Ta;charb;};templateumake_u(Tt){return{.a=t};}intmain(){returnmake_u(1).a;}此代码导致icpc-std=c++11说error:adesignatorintoatemplate-dependenttypeisnotallowed,g++-std=c++0x表示err

c++ - 如何使用两种类型的 union

我正在尝试制作一个可以容纳string和int的vector。我试过下面的代码,但是我得到了编译错误error:useofdeletedfunction'my_union::~my_union()'我做错了什么?#include#includeusingnamespacestd;unionmy_union{stringstr;inta;};intmain(){vectorv;my_unionu;//error:useofdeletedfunction'my_union::~my_union()'u.str="foo";v.push_back(u);return0;}

C++14 - std::revers(ed) std::string 是否在开头包含空字符?

如果我在std::string变量上使用std::reverse,我可以安全地假设空字符'\0'会放在字符串的开头吗? 最佳答案 不,它不会包含NUL字节(除非你在那里放一个)。前向迭代器也不包含NUL字节,它只会迭代字符串本身中的字符。但是,NUL字节保证在.c_str()或.data()的末尾之后。示例程序:#include#include#includeintmain(){std::strings="Hello";std::cout(*i)(*i)输出:Forwards:H72e101l108l108o111Backwards

C++:for 循环中的多个退出条件(多个变量):AND -ed 还是 OR -ed?

For循环和多个变量和条件。我正在使用for循环来设置源索引和目标索引以复制数组中的项目。for(intsrc=0,dst=8;src=0;src++,dst--){arr2[dst]=arr1[src];}反正就是这样。(与)||(||)我的问题是关于退出条件。这里有两个。src和dst>=0.这些条件是AND运算(&&)还是OR运算(||)。进一步解释一下,条件是这样计算的:(src=0)或者他们是这样评价的?(src=0)还是完全不同的东西?我想合乎逻辑的做法是评估我上面指定的两种方式之一,而不是其他方式。 最佳答案 逗号运算

c++ - 通过 union 在 C 和 C++ 中输入双关结构

我已经在gcc和g++中用pedantic编译了这个,我在任何一个中都没有收到警告:#include#include#includestructa{structa*next;inti;};structb{structb*next;inti;};structc{intx,x2,x3;union{structaa;structbb;}u;};voidfoo(structb*bar){bar->next->i=9;return;}intmain(intargc,char*argv[]){structcc;memset(&c,0,sizeofc);c.u.a.next=(structa*)ca

c++ - 您可能会使用无名结构或 union 来做什么?

我明白了union{uint32_tip_addressstruct{uint8_toct1;uint8_toct2;uint8_toct3;uint8_toct4;};};可能对某些人有用,但这里是结构示例中的结构:DetailofMSwarningC4201似乎有点奇怪。谁能展示一个好的用例? 最佳答案 struct中的无名union是有意义的,因为它允许您在不指定其名称的情况下引用union的成员,因此代码更短:struct{inta;union{intb,c,d;};}foo;因此访问union的成员就像访问包含结构的成员: