枚举类型的隐式转换

12

这是一个我希望可以轻松通过谷歌搜索找到答案的基础问题,但没有找到答案。

假设我有一个枚举:

enum abc { a, b, c };

支持哪些隐式转换?不同的编译器是否有编译器扩展或不同的行为?

我问的是枚举类型的隐式转换:

enum abc test = (** which type can appear here? **);

除了从枚举类型进行隐式转换:

(** which type can appear here? **) test2 = test;

我想了解C和C++的答案。


2
你应该让你的问题更具体化,它很有趣。但是你知道这里可能出现的类型是 int,对吧? - Iharob Al Asimi
@iharob 这总是这样吗?http://ideone.com/5WvR9K ...这就是我在问的原因。 - Paul
@iharob在范围内像1e2这样的shortsigned char_Booldouble值不能被缩写吗? - chux - Reinstate Monica
@chux 如果它们可以转换为 int,那么我猜是的! - Iharob Al Asimi
我怀疑对于C和C++来说答案是不同的,但如果它们确实不同,你更想知道哪一个? - Mark Ransom
@MarkRansom 我所链接的代码是用C编译的,所以它们似乎是不同的。我更愿意看到整个情况,但如果你想回答其中一个,也许其他人会回答另一个。 - Paul
1个回答

4

根据参考文献所说:

未经作用域限定的枚举类型的值可以隐式转换为整数类型

参考链接


2
这仅涉及C++,至少参考文献是如此。答案可能适用于两者,但在此应该明确说明。特别是如果参考文献这样说的话。 - Iharob Al Asimi
1
每个枚举类型都应与字符、带符号整数类型或无符号整数类型兼容。类型的选择是由实现定义的,但应能够表示枚举成员的所有值。 - Simia_Dei
1
然而,反之并不成立,您必须添加显式转换。 - ubik

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接