具有常量表达式的 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
这是怎么回事?
此外,Bjarne Stroustrup 编写的 C++ 编程语言
指定整数类型转换为枚举的结果是未定义的,除非该值在枚举范围内。这个范围是多少以及如何计算?
最佳答案
enum
的范围是基础类型的范围。编译器可能选择了 int
作为您的 enum
的基础类型。
这样做是允许的,因为 int
(假设它在您的平台上是 32 位的)可以包含您给它的所有显式值。
您可能会发现 -100000912241
的类型在您的平台上是 long
或 long long
(注意没有例如 C++ 中的否定文字:-100000912241
是文字 100000912241
的一元否定。)。但是 -100000912241
无法放入那个 int
,因此您的代码的行为是未定义。
如果您想检查enum
的底层类型,请使用std::underlying_type
。
关于c++ - 如何在 C++ 枚举中处理常量表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47346124/