【问题标题】: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比较。