gpt4 book ai didi

c++ - 为什么我不能将一个枚举作为另一个枚举的基础类型?

转载 作者:太空狗 更新时间:2023-10-29 23:23:56 25 4
gpt4 key购买 nike

为什么这不是有效的 C++?:

enum foo : unsigned { first_foo, second_foo };
enum bar : foo { best_foo = first_foo };

GCC 5.4.0 说:

/tmp/a.cpp:3:16: error: underlying type ‘foo’ of ‘bar’ must be an integral type
enum bar : foo { best_foo = first_foo };

如果 foo 是一个 float,或者一些结构,或者什么不是,我能理解为什么我会得到这个错误。但这在语义、类型安全等方面对我来说似乎完全合法。我错过了什么?

最佳答案

C++11 [dcl.enum]/2:

The type-specifier-seq of an enum-base shall name an integral type; any cv-qualification is ignored.

枚举本身不是整数类型——[basic.fundamental]/7:

Types bool, char, char16_t, char32_t, wchar_t, and the signed and unsigned integer types are collectively called integral types.

附有非规范性脚注:

Therefore, enumerations are not integral; however, enumerations can be promoted to integral types as specified in [conv.prom].

要实现我认为您正在寻找的效果,仍然很简单:

enum bar : std::underlying_type<foo>::type { best_foo = first_foo };

关于c++ - 为什么我不能将一个枚举作为另一个枚举的基础类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40607013/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com