2015-11-24 63 views
0

是否存在必須使用union且boost :: variant不能使用的任何用例?在聯盟中推薦boost :: variant

更具體地說:工會可以解決和提升::變體不能有什麼問題嗎?

由於C++標準委員會建議using variant instead of union

+1

[Type-punning](https://en.wikipedia.org/wiki/Type_punning)?期望'union'參數的函數?當Boost不可用或無法使用? –

+3

@JoachimPileborg當你閱讀的字段不是最後一個分配的字段時,是不是在C++中通過聯合UB打字? –

+0

這是UB,但人們仍然使用它,因此編譯器在一些有限的情況下不情願地允許它。 –

回答

2

雖然工會在技術上允許某些變體不會的東西,但實際上這些東西都是未定義的行爲。

請注意,這比Implementation Defined強得多:你不能依賴於同一個編譯器做同樣的事情兩次,或者編譯器的未來版本做同樣的事情。

在可移植性方面,沒有可用性,因爲UB意味着「任何事情都可能發生」。

事實上,一些編譯器治療它定義現在實施實際上只是一個側面說明在標準C++

的範圍變的目標是讓識別聯合tuple(union, discriminant))安全,有點像array_view旨在使tuple(pointer, size)安全。