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