C++:特殊工具与技术之union(联合-共用体)

Posted nddtt

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++:特殊工具与技术之union(联合-共用体)相关的知识,希望对你有一定的参考价值。

一、联合(union)概述

联合(union)是一种特殊的类
一个union可以有多个数据成员,但是在任意时刻只有一个数据成员可以有值。当我们给union的某个成员赋值之后,该union的其它成员就变成未定义的状态了。分配给一个union对象的存储空间至少要能容纳它的最大的数据成员
类的某些特性对union同样适用,但并非所有特性都如此:
union不能含有引用类型的成员,union的成员可以是绝大多数类型。在C++11标准中,含有构造函数或析构函数的类类型也可以作为union的成员类型
union可以为其成员指定public、protected、private等标记。默认情况下union的成员都是公有的
union可以定义包括构造函数和析构函数在内的成员函数。但是由于union既不能继承自其它类,也不能作为基类使用,所以在union中不能含有虚函数

二、定义union

union提供了一种有效的途径使得我们可以方便地表示一组类型不同的互斥值
例如我们需要处理一些不同类型的数字数据和字符数据,则在此过程中可以定义一个union来保存这些值:

//Token类型的对象只有一个成员,该成员的类型可能是下列类型中的任意一种
union Token {
    char cval;
    int ival;
    double dval;
};

三、使用union类型

默认情况下union是未初始化的。我们也可以像显式初始化聚合类一样使用一对花括号来初始化一个union
例如:

Token first_token = { a }; //初始化cval成员
Token last_token;            //未初始化的Token对象
Token *pt = new Token;       //指向一个未初始化的Token对象的指针

 

如果提供了初始值,则该初始化被用于初始化第一个成员。因此,first_token的初始化过程实际上是给cval成员赋了一个初值
?我们可以通过成员访问运算符访问一个union对象的成员。

 

以上是关于C++:特殊工具与技术之union(联合-共用体)的主要内容,如果未能解决你的问题,请参考以下文章

C语言 共用体/联合体 union

结构体struct与联合体union的区别

共用体(union)

C++ Primer 5th笔记(chap 19 特殊工具与技术)union

结构体struct和联合体union(联合)有啥区别呢?

名词解析—联合体