C++中structure 和unions在写法上非常像,单纯从语法上来讲他们几乎是一模一样的。先看两中数据结构的声明:
structure:
struct some_struct
{
MEMBER_TYPE1 member1;
MEMBER_TYPE2 member2;
};
unions:
union some_union
{
MEMBER_TYPE1 member1;
MEMBER_TYPE2 member2;
}
从上面的声明看,structure 和unions 的声明除关键字一个是struct 一个是union以外都是一样的。
从使用的语法上来看他们两个也是一样的,具体的使用就不多说了,赋值和计算完全和struct一样,写过struct的人都应该很熟悉,那么他们的区别是什么呢?
C++ primer plus 中都将他们描述为可以用来持有不同类型数据的数据结构。但是struct可以用来同时持有各种类型数据结构,但unions一次只能持有一种数据结构。unions所占用的内存空间以它的成员中占用最大内存空间为准,即,如果一个uninon 包含有int 和long两种类型数据,那么一个union占用一个long类型需要的内存空间大小。使用的时候,union的成员如果被多次赋值,那么union代表的数据为最后一次赋值的成员的结果,而不是每个成员分别持有不同的值。测试代码如下:
// unions.cpp -- test for unions
#include <iostream>
#include <string>
int main()
{
using namespace std;
union bank_card
{
long card_num;
int user_psw;
};
bank_card acbc_card;
acbc_card.card_num = 12345678;
cout << "card number: " << acbc_card.card_num << endl;
acbc_card.user_psw = 999;
cout << "card user password: " << acbc_card.user_psw << endl;
cout << "card number now: " << acbc_card.card_num << endl;
return 0;
}
输出值为:
card number: 12345678
card user password: 999
card number now: 999
可以看出,一个acbc_card union实际上只是算一个实例,操作其中一个成员就更操作整个union一样。
unions 主要用来节省内存空间,对于嵌入式编程,操作系统等对内存管理很严格或者内存很稀缺的地方,unions就能派上大用场。