1. 程式人生 > >C++ Primer 筆記——union

C++ Primer 筆記——union

初始 primer 如果 數據 等保 控制 private 當前 prime

1.union是一種特殊的類。一個union可以有多個數據成員,但是在任意時刻,只有一個數據成員可以有值。當我們給union的某個成員賦值之後,該union的其他成員就變成未定義的狀態了。分配給一個union對象的空間至少要能容納它的最大的數據成員。和其他類一樣,一個union定義了一種新類型。

2.union不能含有引用類型的成員,C++11新標準中,含有構造函數或析構函數的類類型也可以作為union的成員類型。

3.union可以為其成員指定public,protected和private等保護標記。默認情況下,union的成員都是共有的。

4.union的名字是一個類型名,和其他內置類型一樣,默認情況下union是未初始化的。如果提供了初值,則該初始值被用於初始化第一個成員。

5.匿名union是一個未命名的union,並且在右花括號和分號之間沒有任何聲明。一旦我們定義了一個union,編譯器就自動地為該union創建一個未命名的對象。匿名union不能包含受保護的成員或私有成員,也不能定義成員函數。

union
{
    char cval;
    int ival;
};

cval = c;        // 該對象當前保存的值是‘c’
ival = 1;        // 該對象當前保存的值是1


6.C++的早期版本規定,在union中不能含有定義了構造函數或拷貝控制成員的類類型成員。C++11新標準取消了這一限制。

7.當union包含的是內置類型的成員時,編譯器將按照成員的次序依次合成默認構造函數或拷貝控制成員。但是如果union含有類類型的成員,並且該類型自定義了默認構造函數或拷貝控制成員,則編譯器將為union合成對應的版本並將其聲明為刪除的。

C++ Primer 筆記——union