使用static_cast访问union中的值

时间:2014-12-10 11:46:36

标签: c++

假设我有

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;。

1 个答案:

答案 0 :(得分:1)

联合就像结构,但所有成员变量共享相同的内存。这意味着访问您执行此操作的成员就像普通结构一样。

换句话说:

short s = u->s;