C++ Primer 筆記——union
阿新 • • 發佈:2017-09-02
初始 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