union Data
{
int i;
float f;
char str[20];
} data;
structure Data
{
int i;
float f;
char str[20];
} data;
据我所知,“数据”是一个标签,它是可选的。究竟是什么?在声明结构或联合时添加标记可以获得哪些优势。
答案 0 :(得分:2)
据我所知,"数据"是一个标签,它是可选的。
不,这里没有标签。标签表示联合的哪种解释是正确的。例如,如果您的代码分配data.f
并将数据传递给另一个函数并且它显示为data.str
,那么您的程序中会出现大量故障,可能会导致其崩溃。联盟本身并没有为函数提供足够的信息来知道要使用哪个联盟成员。
通过添加标签,您可以指出哪种解释是正确的。例如:
struct TaggedData
{
int type;
union Data value;
} taggeddata;
其中 type 是标记,表示在union中存储了哪种值。读取taggeddata
的函数现在可以使用switch
语句并访问正确的联合成员。
标记数据结构的另一个通用名称是variant type。与Boost.Variant比较。