联盟和结构的'标签'有什么作用?

时间:2015-05-16 10:15:04

标签: c visual-studio-2010 visual-studio visual-c++

union Data
{
   int i;
   float f;
   char  str[20];
} data;

structure Data
{
   int i;
   float f;
   char  str[20];
} data;

据我所知,“数据”是一个标签,它是可选的。究竟是什么?在声明结构或联合时添加标记可以获得哪些优势。

1 个答案:

答案 0 :(得分:2)

  

据我所知,"数据"是一个标签,它是可选的。

不,这里没有标签。标签表示联合的哪种解释是正确的。例如,如果您的代码分配data.f并将数据传递给另一个函数并且它显示为data.str,那么您的程序中会出现大量故障,可能会导致其崩溃。联盟本身并没有为函数提供足够的信息来知道要使用哪个联盟成员。

通过添加标签,您可以指出哪种解释是正确的。例如:

struct TaggedData
{
    int type;
    union Data value;
} taggeddata;

其中 type 是标记,表示在union中存储了哪种值。读取taggeddata的函数现在可以使用switch语句并访问正确的联合成员。

标记数据结构的另一个通用名称是variant type。与Boost.Variant比较。