uniontest
;
intc++98中,上述**無法編譯通過。列舉中的std::string不是pod。main()
用反證法解釋一下。
假設t.s="abc"編譯成功,則t.i=100會直接破壞string中的指標資料。
c++11中,上述**也無法編譯通過。
但是原因是說,test的預設構造,析構等函式都被打上了delete標誌。
相當於 test::test() = delete ;~test::test() = delete ;
直覺上,讓int和string共享相同的儲存空間好像能實現,只要小心處理一下即可。
我們只要重新定義test的建構函式,析構函式,賦值函式等等......
這就是非受限聯合體的由來,你可以混用std::string和int,只要不要胡來即可。
#include
#include
usingnamespace
std;
uniontest
type;
//discriminant
inti_;
std::string
s_;
test&operator=(const
test&w);
test(int);
test(std::string);
~test();
};
test::test(inti)
test::test(std::strings)
test&test::operator=(const
test&w)
if(type==tag::text)
s_.~string();
//destroy
(explicitly!)
switch
(w.type)
type
=w.type;
return
*this;
}
test::~test()
}
intmain()
聯合體union筆記
當多個資料需要共享記憶體或者多個資料每次只取其一時,可以利用聯合體 union 1 聯合體是乙個結構 2 它的所有成員相對於基位址的偏移量都為0 3 此結構空間要大到足夠容納最 寬 的成員 4 其對齊方式要適合其中所有的成員 下面解釋這四條描述 由於聯合體中的所有成員是共享一段記憶體的,因此每個成員...
union聯合體學習
union,中文名 聯合體 共用體 在某種程度上類似結構體struct的一種資料結構,共用體 union 和結構體 struct 同樣可以包含很多種資料型別和變數。不過區別也挺明顯 結構體 struct 中所有變數是 共存 的 優點是 有容乃大 全面 缺點是struct記憶體空間的分配是粗放的,不管...
union聯合體學習
union,中文名 聯合體 共用體 在某種程度上類似結構體struct的一種資料結構,共用體 union 和結構體 struct 同樣可以包含很多種資料型別和變數。不過區別也挺明顯 結構體 struct 中所有變數是 共存 的 優點是 有容乃大 全面 缺點是struct記憶體空間的分配是粗放的,不管...