我正在编写一个课程,假设Are enumeration types layout compatible with their underlying type?的答案为“是”,则与布局兼容struct kevent
,但使用enum class
es代表filter
,{ {1}}等,以及相关字段的正确基础类型。它也是标准布局(字段都是flags
,所有字段都是标准布局,没有private
个成员,没有基类。从我对virtual
的阅读中,我可以确定我的班级和n3690
具有相同的值表示,但我在标准中看不到任何内容因此允许我在它们之间struct kevent
即使这似乎是对“价值表征”的合理解释。这在技术上是否符合标准?如果没有,知道类型的值表示会给你什么?
EDIT 2014/02/24 16:45 EST :在回复评论时,我应该澄清一下,我想reinterpret_cast
第一堂课到引用< / em>第二个,当然你不能直接reinterpret_cast
非指针类型到另一个非指针类型。
答案 0 :(得分:8)
但是我无法在标准中看到任何内容因此允许我在
reinterpret_cast
之间,尽管这似乎是对“价值表征”的合理解释。这在技术上是否符合标准?
没有。标准清楚(参见[basic.lval] p10)关于哪些类型可以别名,并且不包括布局兼容类型。
如果没有,知道类型的值表示会给你什么?
如果类型都是平凡可复制的并且具有相同的值表示,那么您可以从一种类型的对象memcpy到另一种类型的对象,反之亦然。如果它们不是可以轻易复制的,那么它根本不会给你太多。
AFAICT标准实际上并没有说出布局兼容类型可以做什么和不能做什么。