正在使用的成员是否已经测试过联合。

11

工会是否有控制结构来测试当前使用的成员(或是否根本没有成员)?我之所以问这个问题,是因为未定义的行为对你的程序永远不是好事。

1个回答

14

不,没有这样的机制可以直接使用。你需要自己处理这个问题。 通常的做法是将 union 包装在一个 struct 中:

struct MyUnion
{
   int whichMember;
   union {
      //whatever
   } actualUnion;
};

你有一个MyUnion x;,并且x.whichMember告诉你x.actualUnion中使用哪个字段(你需要实现这个功能)。


3
这种结构通常被称为“带标签联合”或“标记联合”。 - John Dibling
1
是的,我想到了类似的方法,但因为我更喜欢语言结构而不是自己制作的结构,所以我只是想知道是否存在这样的结构。感谢您的快速回答。 - Alex D.
@AlexD. Pascal有一个标记联合,但它实际上与此相同。您仍然需要测试标记以确定使用哪个元素。 - Spencer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接