【问题标题】:What does 'Tag' of union and structure do?联合和结构的“标签”有什么作用?
【发布时间】:2015-07-28 06:09:42
【问题描述】:
union Data
{
   int i;
   float f;
   char  str[20];
} data;

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

据我所知,这里的“数据”是一个标签,它是可选的。它到底是什么?在声明结构或联合的同时添加标签可以获得什么好处。

【问题讨论】:

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


    【解决方案1】:

    这里,据我所知,“data”是一个标签,它是可选的。

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-10
      • 2019-07-29
      • 1970-01-01
      • 2012-11-02
      相关资源
      最近更新 更多