【C++ Primer Plus学习记录】共用体

2023-11-09

共用体(union) 是一种数据格式,它能够存储不同的数据类型,但只能同时存储其中的一种类型。也就是说,结构可以同时存储int、long和double,共用体只能存储int、long或double。

共用体的句法与结构相似,但是含义不同。例如,请看下面的声明:

union one4all
{
int int_val;
long long_val;
double double_val;
};

可以使用one4all变量来存储int、long或double,条件是在不同的时间进行:

one4all pail;
pail.int_val = 15;
cout << pail.int_val;
pal.double_val = 1.38;//store a double,int value is lost
cout << pal.double_val;

共用体每次只能存储一个值,因此它必须有足够的空间来存储最大的成员,所以,共用体的长度为其最大成员的长度。

共用体的用途之一是,当数据项使用两种或更多种格式时(但不会同时使用)时,可以节省空间。

例如,假设管理一个小商品目录,其中一些商品的ID为整数,而另一些商品的ID为字符串。此时,可以这样做:

struct widget
{
   char brand[20];
   int type;
   union id
   {
      long id_num;  //type 1 widget
      char id_char[20]; //other widget
   }id_val;
};
...
widget prize;
...
if(prize.type == 1)
    cin >> prize.id_val.id_num;  //use member name to indicate mode
else
    cin >> prize.id_val.id_char;

匿名共用体(anonymous union)没有名称,其成员将成为位于相同地址处的变量。显然,每次只有一个成员是当前的成员。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【C++ Primer Plus学习记录】共用体 的相关文章

随机推荐