我正在写一门课,假设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'位。 –