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

She*_*evy 8 c++ standards standard-layout c++14

我正在编写一个类,假设枚举类型布局的答案与其基础类型兼容?是"是",是布局兼容struct kevent,但使用enum class的ES filter,flags等有合适的标的类型相关的字段.它也是标准布局(字段全部private都是标准布局,没有virtual成员,没有基类).从我的阅读中n3690,我可以确定我的班级并且struct kevent具有相同的价值表示,但我无法看到标准中的任何内容因此允许我reinterpret_cast介于它们之间,即使这似乎是对"价值表征"的合理解释.这在技术上是否符合标准?如果没有,知道一个类型的值表示给你什么?

编辑2014/02/24 16:45 EST:在回复评论时,我应该澄清我想要reinterpret_cast第一个类来引用第二个,当然你不能直接reinterpret_cast将非指针类型转换为另一个非 - 指针类型.

Jon*_*ely 10

但是我无法看到标准中的任何内容因此允许我reinterpret_cast介于它们之间,即使这似乎是对"价值表征"的合理解释.这在技术上是否符合标准?

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

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

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

AFAICT标准实际上并未说明布局兼容类型可以做什么和不能做什么.