【发布时间】:2017-07-13 21:31:17
【问题描述】:
枚举常量的类型是什么,当它在非作用域枚举定义之外使用时?
考虑以下代码:
#include <iostream>
enum modes
{
begin = 0,
end = 1
};
int main()
{
std::cout << std::boolalpha
<< std::is_same<unsigned int, typename std::underlying_type<modes>::type>::value
<< std::endl;
std::cout << sizeof(modes) << std::endl;
std::cout << (-100 + end) << std::endl;
}
这会在我的机器上产生:
true
4
-99
现在,如果我只将其他一些枚举器的值 begin 更改为 2147483648,那么我的输出将变为:
true
4
4294967197
显然,这意味着end的类型已经从int变为unsigned int,即使modes的底层类型仍然相同(即unsigned int)。
关于枚举的积分提升是否有一些特殊规则?
【问题讨论】:
标签: c++ enums enumeration enumerator integer-promotion