带有常量表达式的c ++枚举的范围是多少?这是我的代码
#include <iostream>
int main(){
enum e3{min = -10, max = 100000};
e3 x = e3(-1000);
e3 y= e3(-100000912241);
std::cout<<x<<" "<<y<<std::endl;
}
输出-1000 -1216664433
这是怎么回事?
此外,The C++ programming language by Bjarne Stroustrup
指定将整数类型转换为枚举的结果是未定义的,除非该值在枚举范围内。这个范围是什么以及如何计算?
答案 0 :(得分:4)
enum
的范围是基础类型的范围。编译器可能已选择int
作为enum
的基础类型。
允许这样做,因为int
(假设它在你的平台上是32位)可以包含你给它的所有显式值。
您可能会发现平台上-100000912241
的类型是long
或long long
(请注意,C ++中没有负面文字:{{ 1}}是文字-100000912241
的一元否定。)。但是100000912241
无法适应-100000912241
,因此代码的行为未定义。
如果您想检查int
的基础类型,请使用enum
。