【发布时间】:2016-11-15 10:05:49
【问题描述】:
为什么这不是有效的 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,或者一些结构,或者其他什么,我可以理解为什么我会得到这个错误。但这在语义、类型安全等方面对我来说似乎完全合法。我错过了什么?
【问题讨论】:
-
为什么?因为标准是这样说的。 :)
-
@Zereges: But... why?
-
通常的原因是some people wrote a proposal和他们的提议被接受了。
-
对我来说,说一个枚举可以基于另一个枚举是一个逻辑错误。如果您认为 base 是存储枚举中定义的值的存储类型,我无法将其作为逻辑表达式来说存储类型是枚举。因为枚举不仅是存储类型,它还包含一组有效值。那么基于其他枚举的枚举应该是什么?只是底层枚举的一个子集,因为所有其他值都没有在底层枚举中定义?为什么枚举不应该基于也代表某种整体存储类型的位域?
-
@Klaus:看看我的动机here。但你提出了一个有效的观点,也许你应该把它作为一个答案。
标签: c++ c++11 enums subclassing