c++ 强转枚举类型 enum class


 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;


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM