old enum
#include <stdio.h> enum yy { a, b, c, d, e = 0xFFFFFFFFFFFF, f, }; enum zz { x, y, z }; int main() { enum yy y1 = b; printf("sizeof =%lu\n", sizeof(y1)); enum yy y2 = e; printf("sizeof =%lu\n", sizeof(y2)); enum zz z = x; printf("sizeof =%lu\n", sizeof(enum zz)); printf("sizeof =%lu\n", sizeof(z)); if (y1 > y2) { printf("y1i > y2\n"); } else { printf("y1 <= y2\n"); } if (y1 > z) { printf("y1 > z\n"); } else { printf("y1 <= z\n"); } return 0; }
sizeof =8
sizeof =8
sizeof =4
sizeof =4
y1 <= y2
y1 > z
enum class
define: enum class ENUM_NAME:type{a, b, c}
#include <stdio.h> enum class yy { //default type: int a, b, c, d, e, f, }; enum class zz:char { x, y, z }; int main() { enum yy y1 = yy::b; // as to strong type enum, u must specify the type printf("sizeof =%lu\n", sizeof(y1)); enum yy y2 = yy::e; printf("sizeof =%lu\n", sizeof(y2)); enum zz z = zz::x; printf("sizeof =%lu\n", sizeof(enum zz)); printf("sizeof =%lu\n", sizeof(z)); if (y1 > y2) { printf("y1i > y2\n"); } else { printf("y1 <= y2\n"); } if ((int)y1 > (int)z) { // compile error printf("y1 > z\n"); } else { printf("y1 <= z\n"); } return 0; }
mutian@mutian:~/share$ g++ -std=c++0x cc.c
mutian@mutian:~/share$ ./a.out
sizeof =4
sizeof =4
sizeof =1
sizeof =1
y1 <= y2
y1 > z
对于强类型,两种不同enum常量比較没有实际意义,可是编译器是先将enum常量转换为int类型后,再比較的
c11标准又进行了相关扩展:兼容并拓展了C enum类型的
enum type8:char{a=1, b=2};
type8 t =a;