10

我正在写一个类,假设答案是枚举类型布局与其底层类型兼容吗?是“是”,是布局兼容的,struct kevent但使用enum classes 来表示filter,flags等,以及相关字段的适当基础类型。它也是标准布局(字段都是private标准布局,没有virtual成员,没有基类)。从我对 的阅读中n3690,我可以确定我的班级和struct kevent具有相同的价值表示,但我看不到标准中的任何内容,因此我可以reinterpret_cast尽管这似乎是对“价值表示”的合理解释。这在技术上是标准允许的吗?如果不是,那么知道类型的值表示会给您带来什么?

编辑 2014/02/24 东部标准时间 16:45:作为对评论的回应,我应该澄清我希望reinterpret_cast第一类引用第二类,因为当然你不能直接reinterpret_cast将非指针类型指向另一个非- 指针类型。

4

1 回答 1

11

但是我在标准中看不到任何允许我在它们之间进行reinterpret_cast区分的东西,即使这似乎是对“价值表示”的合理解释。这在技术上是标准允许的吗?

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

如果不是,那么知道类型的值表示会给您带来什么?

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

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

于 2014-02-25T14:34:01.383 回答