带有常量表达式的 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
指定整数类型到枚举的转换结果是未定义的,除非值在枚举范围内。这个范围是多少,如何计算?
anenum
的范围是基础类型的范围。编译器可能已选择 anint
作为您的enum
.
允许这样做,因为 an int
(假设它在您的平台上是 32 位)可以包含您给它的所有显式值。
您可能会发现您的平台上的类型-100000912241
是 along
或 a long long
(请注意,C++ 中没有否定字面量:-100000912241
是字面量100000912241
.的一元否定)。但是-100000912241
不能适应那个int
,所以你的代码的行为是undefined。
如果要检查 的基础类型enum
,请使用std::underlying_type
.
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句