'Tag' of union 和 structure 有什么作用?
What does 'Tag' of union and structure do?
union Data
{
int i;
float f;
char str[20];
} data;
structure Data
{
int i;
float f;
char str[20];
} data;
这里,据我所知,"data"是一个标签,它是可选的。它到底是什么?在声明结构体或联合体时添加标签有什么好处
Here, as I know,"data" is a tag and it is optional.
不,这里没有标签。标签指示联合的哪个解释是正确的。例如,如果您的代码分配 data.f
并将数据传递给另一个函数,并且它读取 data.str
那么您的程序将出现严重故障,很可能会导致程序崩溃。联合本身没有给函数足够的信息来知道要使用哪个联合成员。
通过添加标签,您可以指出哪种解释是正确的。例如:
struct TaggedData
{
int type;
union Data value;
} taggeddata;
其中 type 是标记,表示联合中存储的值类型。读取 taggeddata
的函数现在可以使用 switch
语句并访问正确的联合成员。
标记数据结构的另一个常用名称是 variant type. Compare to Boost.Variant。
union Data
{
int i;
float f;
char str[20];
} data;
structure Data
{
int i;
float f;
char str[20];
} data;
这里,据我所知,"data"是一个标签,它是可选的。它到底是什么?在声明结构体或联合体时添加标签有什么好处
Here, as I know,"data" is a tag and it is optional.
不,这里没有标签。标签指示联合的哪个解释是正确的。例如,如果您的代码分配 data.f
并将数据传递给另一个函数,并且它读取 data.str
那么您的程序将出现严重故障,很可能会导致程序崩溃。联合本身没有给函数足够的信息来知道要使用哪个联合成员。
通过添加标签,您可以指出哪种解释是正确的。例如:
struct TaggedData
{
int type;
union Data value;
} taggeddata;
其中 type 是标记,表示联合中存储的值类型。读取 taggeddata
的函数现在可以使用 switch
语句并访问正确的联合成员。
标记数据结构的另一个常用名称是 variant type. Compare to Boost.Variant。