共用体(union)是一种数据格式,同一时间只能存储其中一种类型。共用体的长度是最大成员的长度。用途是节省空间。

    假设有个商品目录,ID有的是整数,有的是字符串,可以这样做:

    1. struct widget
    2. {
    3. char brand[20];
    4. int type;
    5. union id
    6. {
    7. long id_num;
    8. char id_char[20];
    9. }id_val;
    10. };
    11. widget prize;
    12. if (prize.type == 1) {
    13. cout << prize.id_val.id_num << endl;
    14. } else {
    15. cout << prize.id_val.id_char << endl;
    16. }

    匿名共用体(anonymous union)没有名称,成员位于相同地址处:

    1. struct widget
    2. {
    3. char brand[20];
    4. int type;
    5. union
    6. {
    7. long id_num;
    8. char id_char[20];
    9. };
    10. };
    11. widget prize;
    12. if (prize.type == 1) {
    13. cout << prize.id_num << endl;
    14. } else {
    15. cout << prize.id_char << endl;
    16. }

    由于共用体是匿名的,因此 id_num、id_char 的地址相同,所以不需要中间标识符 id_val,程序员负责确定当前哪个成员是活动的。