假设我有
union myUnion
{
short s;
long l;
char* cstr;
};
现在假设我得到一个指向myUnion的指针并且在编译类型中知道" type"它是。
执行此操作是保存/纠正:
short s = *(static_cast<short*>(u)); // where u is a pointer to myUnion
我认为这是因为如果我正确理解c ++中的联合,那么对于myUnion u
&u == &(u.s) == &(u.l) == &(u.cstr)
但我不确定,我担心通过这样做,我可以搭乘未定义的行为......
提前感谢任何输入!
编辑只是为了澄清:我知道如何使用工会&#34;正常方式&#34; (短s = u.s)。我知道工会因为C而存在,你可能不想在模式c ++代码中使用工会。
我在问,因为我感兴趣的是&#34; static_cast&#34;以上是&#34;坏&#34;。
答案 0 :(得分:1)
联合就像结构,但所有成员变量共享相同的内存。这意味着访问您执行此操作的成员就像普通结构一样。
换句话说:
short s = u->s;