• 枚举类型的使用方法enum


    一、枚举类型的使用方法 
    一般的定义方式如下:
    enum enum_type_name
    {
       ENUM_CONST_1,
       ENUM_CONST_2,
       ...
       ENUM_CONST_n
    } enum_variable_name;
    
    注意:enum_type_name 是自定义的一种数据数据类型名,而enum_variable_name 为enum_type_name类型的一个变量,也就是我们平时常说的枚举变量。实际上enum_type_name类型是对一个变量取值范围的限定,而花括号内是它的取值范围,即enum_type_name 类型的变量enum_variable_name 只能取值为花括号内的任何一个值,如果赋给该类型变量的值不在列表中,则会报错或者警告。ENUM_CONST_1、ENUM_CONST_2、...、ENUM_CONST_n,这些成员都是常量,也就是我们平时所说的枚举常量(常量一般用大写)。
    
    enum 变量类型还可以给其中的常量符号赋值,如果不赋值则会从被赋初值的那个常量开始依次加1,如果都没有赋值,它们的值从0 开始依次递增1。如分别用一个常数表示不同颜色:
    enum Color
    {
       GREEN = 1,
       RED,
       BLUE,
       GREEN_RED = 10,
       GREEN_BLUE
    }ColorVal;
    
    其中各常量名代表的数值分别为:
       GREEN = 1
       RED = 2
       BLUE = 3
       GREEN_RED = 10
       GREEN_BLUE = 11
    
    二、枚举与#define 宏的区别 
    下面再看看枚举与#define 宏的区别:
    1#define 宏常量是在预编译阶段进行简单替换。枚举常量则是在编译的时候确定其值。
    2)一般在编译器里,可以调试枚举常量,但是不能调试宏常量。
    3)枚举可以一次定义大量相关的常量,而#define 宏一次只能定义一个。
    
    留两个问题:
    A),枚举能做到事,#define 宏能不能都做到?如果能,那为什么还需要枚举?
    B),sizeof(ColorVal)的值为多少?为什么?
    
    
    
    
    enum定义类似与下面这样
    enum Color {
              Red,
             Gray,
             Blue
    };
    用起来可能像这样:
    Color color = Red;
    switch(color) {
    case Red:
            ........
    case Gray:
            ........
    case Blue:
            ........
    }
    2
    先说为什么Red,不能写成Color::Red,后面这种写法似乎更符合我们的习惯。原因是:
    在C++中,枚举类型中定义的常量,属于定义枚举的作用域,而不属于这个枚举类型;
    我们可以这样写:
        Color color = ::Red;
    却不能这样写:
        Color color = Color::Red
    3
    关于枚举类型所占用的内存大小,在stackoverflow中有关于这样的一个帖子,个人认为解释的比较合理。
    其中的一句解释是:之所以是4个字节是因为enum类型是作为一个int来存储的。
  • 相关阅读:
    BZOJ 1008: [HNOI2008]越狱
    BZOJ 1007: [HNOI2008]水平可见直线
    BZOJ 1005: [HNOI2008]明明的烦恼
    【LibreOJ10121】与众不同(RMQ,二分)
    【NOIP模拟】数字对(RMQ,二分)
    【POJ3264】Balanced Lineup(RMQ)
    【JZOJ4857】Tourist Attractions(Bitset)
    【BZOJ2330】糖果(差分约束系统,强连通分量,拓扑排序)
    C++对拍数据生成
    C++字符串读入
  • 原文地址:https://www.cnblogs.com/zendu/p/4987965.html
Copyright © 2020-2023  润新知