美文网首页
[cpp deep dive] enum枚举类型

[cpp deep dive] enum枚举类型

作者: Quasars | 来源:发表于2016-04-30 16:12 被阅读311次
  1. 如何声明一个枚举类型?
  enum color{red, blue, green, orange};//statement with a name of enum type
  enum {red, blue, green, orange};//or without a name
  1. 如何合法使用枚举类型?
color cc1 = red;//valid
color cc01 = (color)0;//valid
int crs = red;//valid 'enum' to' int'
int crr = red + blue;//valid, enum will be converted to int and then calc.
  1. 不合法的例子?
color cc2 = 0;//not valid ,'int' to 'enum'
color cc3 = 0;cc3++;//not valid, operator‘++’
color cc4 = red + blue;//not valid, 'int' to 'enum'
color cc5 = (color)(red + blue);//but this it valid.
color cc6 = (color)127;//undefined behavior but won't get an error. code will work.
  1. enum的值 ?
    enum bigstep{first, sec=100, third};//first 's value = 0, sec = 100, third = 101.
    enum bigstep2{aar, aar2 = 0, aar3, aar32 = 1};//multiple enum's type have the same value.
  1. enum的sizeof?
    enum size{x1,x2,x3};//sizeof(size) == 4
    enum size2{x11,x22=100000000000000LL,x33};//sizeof(size2) == 8(long long)

上代码片

#include <stdio.h>

void test_enum(){
#define PR(c) printf("id: %d\n", (c))
    enum color{r, g, b};

    enum bigstep{first, sec=100, third};//first 's value = 0, sec = 100, third = 101.
    enum bigstep2{aar, aar2 = 0, aar3, aar32 = 1};//multiple enum's type have the same value.
    enum {skip01, skip02};

    
    color c1,c2,c3;
//  c1 = 0;//error: invalid conversion from "int" to "test_enum()::color"
//  c1 = color.r;//error: expected primary-expression before "." token
//  c1 = color::r;error: ¡®color¡¯ is not a class or namespace

/*  
    OK: enum ==> int
    Not OK: int ==> enum
 */
    c1 = r;//ok
    c1 = (color)0;//ok 
    PR(c1);
    c1 = (color)5;  //undefined behavior
    PR(c1);         //just print value 5.
    c1 = (color)127;//same as above.
    PR(c1); 
    
    c2 = r;
//  c2++;// error: no ¡®operator++(int)¡¯ declared for postfix ¡®++¡¯ 
    PR(c1+c2);//valid
    int x = c1+c2;//valid
    PR(x);
//  c3 = r+b;//error: invalid conversion from ¡®int¡¯ to ¡®test_enum()::color
//  c3 = (color)r+b;//same as above due to order of compute. 
    c3 = (color)(r+b);//valid
//enum size{a,b,c};
//enum size2{a,b=1000LL,c};//error: redeclaration of ¡®b¡¯
    enum size{x1,x2,x3};
    enum size2{x11,x22=100000000000000LL,x33};

    PR(sizeof(size));
    PR(sizeof(size2));


}

int main(){
    test_enum();
    return 0;
}

6.实际例子?

further reading:
<a href=http://www.cnblogs.com/hicjiajia/archive/2009/09/27/1574957.html>c++枚举类型_博客园</a>

相关文章

  • [cpp deep dive] enum枚举类型

    如何声明一个枚举类型? 如何合法使用枚举类型? 不合法的例子? enum的值 ? enum的sizeof? 上代码...

  • C\C++区别 枚举类型enum

    C\C++区别 枚举类型enum from my csdn blog enum.c enum.cpp 分析 区别C...

  • [cpp deep dive] `operator` deep

    我在还没深入学习操作符重载的时候,虽然可以自己边debug边整出一个可以运行的操作符重载,但对其的了解却十分浅显,...

  • 枚举

    枚举 wiki Java的枚举类型用法介绍 深入理解Java枚举类型(enum) 为什么要用enum? 学习计划 ...

  • Rust 编程语言-6-枚举和模式匹配

    6. Enum和Pattern matching 6.1 Enum枚举 IP地址枚举 消息类型枚举:可以看到枚举中...

  • 菜鸡学Swift3.0 12.枚举

    1. 枚举定义 enum 定义枚举类型 { case 枚举项 ... } 2.原始值 rawValue enum...

  • 037_枚举类型。

    namespace _037_枚举类型 { //枚举类型的定义 enum GameState:byte//...

  • C语言基础 之 枚举类型

    枚举类型 枚举类型: 列出所有可能的值 枚举类型的定义 枚举类型定义的一般格式:enum 枚举类型名 {枚举值表}...

  • Python_枚举

    一、枚举 Enum类 Python中所有枚举类型都是enum模块下的Enum类的子类。 枚举中的标识最好全部使用大...

  • C#魔将-lesson_07-枚举

    枚举(Enum) 枚举是一组命名整型常量。枚举类型是使用 enum 关键字声明的。C# 枚举是值类型。换句话说,枚...

网友评论

      本文标题:[cpp deep dive] enum枚举类型

      本文链接:https://www.haomeiwen.com/subject/zzekrttx.html