Tag: c ++ 03

转换为积分类型后C ++枚举类型的符号不正确

我的理解是根据Integral Promotion将C ++枚举转换为整数类型。 在Integral Promotion期间,我们应该首先尝试将值转换为int ,如果值不能用int表示,则应使用unsigned int : C ++ 03 conv.prom: 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; A6是0xffffFFF1 ,应该是无符号值(十进制4294967281)。 并且,由于此值不能由int表示,因此应将其转换为unsigned int 。 但很明显,当用于比较时, A6被转换为-15。 为什么会这样?

C ++和C中的联合初始化

我已经在定义为的头文件中构建了一个使用常量的工作C库 typedef struct Y { union { struct bit_field bits; uint8_t raw[4]; } X; } CardInfo; static const CardInfo Y_CONSTANT = { .raw = {0, 0, 0, 0 } }; 我知道.raw初始化程序只是C语法。 如何在其中使用联合定义常量,以便我可以在C和C ++中使用它们。