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就能派上大用場。