如何在c ++枚举中处理常量表达式?

时间:2017-11-17 08:18:30

标签: c++ enums

带有常量表达式的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指定将整数类型转换为枚举的结果是未定义的,除非该值在枚举范围内。这个范围是什么以及如何计算?

1 个答案:

答案 0 :(得分:4)

enum的范围是基础类型的范围。编译器可能已选择int作为enum的基础类型。

允许这样做,因为int(假设它在你的平台上是32位)可以包含你给它的所有显式值。

您可能会发现平台上-100000912241的类型是longlong long(请注意,C ++中没有负面文字:{{ 1}}是文字-100000912241的一元否定。)。但是100000912241无法适应-100000912241,因此代码的行为未定义

如果您想检查int的基础类型,请使用enum

参考:http://en.cppreference.com/w/cpp/types/underlying_type