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

标签 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

这是怎么回事? 此外,Bjarne Stroustrup 编写的 C++ 编程语言 指定整数类型转换为枚举的结果是未定义的,除非该值在枚举范围内。这个范围是多少以及如何计算?

最佳答案

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

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

您可能会发现 -100000912241 的类型在您的平台上是 longlong long(注意没有例如 C++ 中的否定文字:-100000912241 是文字 100000912241 的一元否定。)。但是 -100000912241 无法放入那个 int,因此您的代码的行为是未定义

如果您想检查enum 的底层类型,请使用std::underlying_type

引用:http://en.cppreference.com/w/cpp/types/underlying_type

关于c++ - 如何在 C++ 枚举中处理常量表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47346124/

相关文章:

c++ - 选择什么容器

C++:枚举类型作为模板参数 - 全局范围

java - 使用 GSON 序列化/反序列化包含特殊枚举(不是字符串枚举)的 POJO

sql - PostgreSQL 条件枚举

c++ - 未解析的外部符号 _declspec(dllimport)

c++ - 输出错误 Project Euler 7

C++ 字符串数组,从文件中加载文本行

c++ - CUDA 编译错误 : __hmul and __hneg are undefined

c++ - C++11 "auto"关键字是否检索到 "cv-qualifier"?我有冲突样本

java - 在方法中初始化枚举类型时遇到问题