枚举类型布局是否与其基础类型兼容?

She*_*evy 5 c++ enums language-lawyer c++14

我期待通过n3690,即将到来的选秀C++14标准,我在看节7.29

如果两个枚举类型具有相同的基础类型,则它们是布局兼容的。

但是,我找不到任何说明枚举类型与其基础类型布局兼容的内容。对我来说,考虑到“基础类型”的含义,这应该遵循合理的语义,这似乎很明显,但标准是否真的保证了这一点?

Tem*_*Rex 3

不,标准中没有明确引用这一点。最接近的是同一段落的第 7 点

\n\n
\n

7 [...] 基础类型是整型,可以表示枚举中的所有枚举值 de\xef\xac\x81ned。如果没有整型\n 可以表示所有枚举数值,则该枚举\n 格式错误。[...]

\n
\n\n

此外,4.5 积分促销 [conv.prom] 说

\n\n
\n

4 基础类型为\n \xef\xac\x81xed (7.2) 的无作用域枚举类型的纯右值可以转换为其基础类型的纯右值。

\n
\n\n

正如评论中所指出的,可能存在(不正当的 IMO)实现,它们在枚举及其基础类型之间具有不同的字节序。这将是一个实施质量问题。出于所有实际目的,应该预期布局兼容性。

\n

  • 假设的极其邪恶的实现可能会使枚举类型成为大端,但底层整数类型成为小端。这个答案中没有任何内容表明这样的实现是无效的,除了我在对该问题的评论中指出的一般 C 兼容性要求之外,我在标准中找不到任何内容。 (3认同)