c - 转换为整数类型后,C++枚举类型的符号不正确

标签 c visual-c++ enums c++03

我的理解是C++枚举根据Integral Promotion转换为整数类型。并且在Integral Promotion中,我们应该首先尝试将值转换为int,如果该值不能由int表示,则应使用unsigned int:

C++ 03转换舞会:

2)....枚举类型(7.2)的右值可以转换为右值
可以代表所有值的以下第一种类型
枚举的值(即bmin至bmax范围内的值
在7.2中描述:int,unsigned int,long或unsigned long。

但是我在VC++ 2010中的测试显示了矛盾的结果:

enum {A1=60, A2=61,A3=63,A4=64,A5=66,A6=0xffffFFF1};
const bool b1 = A6 < A1;
//result b1=true;
A60xffffFFF1,应为无符号值(十进制4294967281)。并且,由于此值不能用int表示,因此应将其转换为unsigned int。但是很明显,在比较中使用A6时将其转换为-15。为什么会这样呢?

最佳答案

这是MS VC++的错误。我描述了它here

尽管说明是用俄语编写的,但是您可以使用google service translation等将其翻译成英文。

在C++标准本身中,相对于枚举也存在缺陷。我也描述了
here

here可以访问有关枚举的另一参考(当前为英文)。

关于c - 转换为整数类型后,C++枚举类型的符号不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24802322/

相关文章:

c - 从矩阵读取,用 malloc 分配,AddressSanitizer : heap-buffer-overflow

c++ - 项目中缺少 guiddef.h

c++ - 为什么使用这个库需要它的内部头文件?

c++ - 从 cpp 和 hh 文件制作库

swift - 我如何编码(使用 NSCoding)没有 rawValue 的枚举?

node.js - 将 TypeScript 枚举与 Mongoose 模式一起使用

c - 读取文件时遇到 fgetc 问题

c - 在处理命令行参数时如何在 C 中考虑空格

c - 链接共享库时的问题

swift - 嵌套枚举以允许多个时间范围