我是否可以在布局兼容的标准布局类型之间合法地重新解释?

时间:2014-02-22 15:30:19

标签: c++ standards c++14 standard-layout

我正在编写一个课程,假设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非指针类型到另一个非指针类型。

1 个答案:

答案 0 :(得分:8)

  

但是我无法在标准中看到任何内容因此允许我在reinterpret_cast之间,尽管这似乎是对“价值表征”的合理解释。这在技术上是否符合标准?

没有。标准清楚(参见[basic.lval] p10)关于哪些类型可以别名,并且不包括布局兼容类型。

  

如果没有,知道类型的值表示会给你什么?

如果类型都是平凡可复制的并且具有相同的值表示,那么您可以从一种类型的对象memcpy到另一种类型的对象,反之亦然。如果它们不是可以轻易复制的,那么它根本不会给你太多。

AFAICT标准实际上并没有说出布局兼容类型可以做什么和不能做什么。