前言
一、在union中儲存物件
在c中union中可以儲存任意型別的內建資料型別,那麼在c++中union是否可以儲存物件呢?還是讓我們看乙個例子吧,這比任何言語都能說明問題,不是嗎?
#pragma warning(disable : 4786)
#include
using namespace std;
class testunion
;int data_;
};typedef union _tagutype_
ut;int main (void)
class testunion
; 二、類中union的初始化
#pragma warning(disable : 4786)
#include
using namespace std;
class testunion
;union
data_;
storetype stype_;
testunion(testunion&);
testunion& operator=(const testunion&);
public:
testunion(const char* ch);
testunion(long l);
operator const char*() const
operator long() const
};testunion::testunion(const char* ch):data_.ch_(ch),stype_(const_charp)
testunion::testunion(long l):data_.l_(l),stype_(long)
int main (void)
真是不幸,編譯都通不過,好象沒有什麼問題呀,為什麼呢?data_.ch_(ch)和data_.l_(l)有問題嗎?如果你問乙個c程式設計師他會告訴你,絕對沒問題。你不會去懷疑編譯器有問題吧!不好意思!我一開始就是這麼想的,真是慚愧。費解,迷惑。讓我們來看看構造testunion物件時發生了什麼,這樣你就會明白了。當建立testunion物件時,自然要呼叫其相應的建構函式,在建構函式中當然要呼叫其成員的建構函式,所以其要去呼叫union成員的建構函式,但是其為匿名的,有沒有建構函式可呼叫,所以出錯。很明顯在c++中union和class一樣它可以有建構函式,不能如此直接引用其成員。struct同樣有這限制。只要我們給其定義乙個建構函式什麼問題都解決了。示例如下:
class testunion
;union dataunion //不能匿名
data_;
storetype stype_;
testunion(testunion&);
testunion& operator=(const testunion&);
public:
testunion(const char* ch);
testunion(long l);
operator const char*() const
operator long() const
};testunion::test
union(const char* ch):data_(ch),stype_(const_charp)
testunion::testunion(long l):data_(l),stype_(long)
testunion::dataunion::dataunion(const char* ch):ch_(ch)
testunion::dataunion::dataunion(long l):l_(l)
;struct
...;
;;這樣我們既可以根據具體的含義來訪問變數,也可以象陣列一樣的loop;
壓縮:compression
......;
struct
...;
;;這樣對於集中處理的情況,比如==,就會大幅度提高效率,象在64位機上,只要一次,或者傳輸資料的情況,壓縮解壓縮都非常方便;
危險:匿名的union用法,不是standard,所以在compiler上要確認==>編譯器移植性不好;
不同的機器作業系統上資料的size都是不一樣,表示不一樣,那麼在用union的時候,尤其是在移植的時候,都是危險的情況;
但是如果系統,compiler都是一樣的話,在合適的地方使用union還是可以的。
C 中union的應用剖析
前言 熟悉c的程式設計師都知道union 聯合體 的用法,利用union可以用相同的儲存空間儲存不同型別的資料型別,從而節省記憶體空間。當訪問其內成員時可用 和 來直接訪問。在c 出現後,它繼承了union並保留了其在c中的特性。但是在c 中的union又有了新的擴充套件,這需要大家了解,要不然你會...
C 中union的應用剖析
前言 熟悉c的程式設計師都知道union 聯合體 的用法,利用union可以用相同的儲存空間儲存不同型別的資料型別,從而節省記憶體空間。當訪問其內成員時可用 和 來直接訪問。在c 出現後,它繼承了union並保留了其在c中的特性。但是在c 中的union又有了新的擴充套件,這需要大家了解,要不然你會...
C 中union的使用
聯合 union 在c c 裡面見得並不多,但是在一些對記憶體要求特別嚴格的地方,聯合又是頻繁出現,那麼究竟什麼是聯合 怎麼去用 有什麼需要注意的地方呢?就這些問題,我試著做一些簡單的回答,裡面肯定還有不當的地方,歡迎指出!1 什麼是聯合?聯合 是一種特殊的類,也是一種構造型別的資料結構。在乙個 聯...