我正在寫一門課,假設Are enumeration types layout compatible with their underlying type?的答案爲「是」,但版式兼容struct kevent
,但使用enum class
ES爲filter
,flags
等與相關字段的適當底層類型。它也是標準佈局(所有字段都是private
,它們都是標準佈局,沒有virtual
成員,沒有基類)。從我讀到的n3690
中,我可以確定我的班級和struct kevent
具有相同的值表示形式,但是我看不到標準中的任何內容,因此我可以在它們之間使用reinterpret_cast
,儘管這似乎是對「價值」的合理解釋表示」。標準在技術上允許嗎?如果不是,知道某種類型的價值表示會給你什麼?我可以在佈局兼容的標準佈局類型之間合法reinterpret_cast嗎?
編輯2014年2月24日16:45 EST:針對一個評論,我要澄清,我想第一類reinterpret_cast
到參考第二,當然你可以不直接reinterpret_cast
一個非指針類型到另一個非指針類型。
[class.mem]/18允許通過聯合進行某些類型的雙擊,[class.mem]/19允許通過reinterpret_cast訪問* first *數據成員。但我不確定是否還有更多。 – dyp
你不能在結構類型之間「reinterpret_cast」,你是指在指向這些類型的指針之間進行轉換,並通過指向另一個類型的指針讀取一個指針? –
如果你可以從'指向A'的'reinterpret_cast'到'指向B'的指針,你可以''把'''reinterpret_cast'從'A'重新引用到'引用B'。我會更新這個問題,明確提及'reference to'位。 –