C++枚举

枚举的基础用法不不再赘述

枚举的三点问题

1、作用域问题

举个例子,颜色有blue代表蓝色,心情有blue代表忧郁。
以下是示例代码,存在语法错误(BLUE冲突)

enum Color
{
    RED,
    BLUE
};
enum Feeling
{
    EXCITED,
    BLUE
};

int main()
{
    Color a = BLUE; // error
    Feeling b = EXCITED;
    std::cout << a << ":" << b << std::endl;
    return 0;
}

解决思路1

为每个含有相同命名的枚举外面增加一个自定义的命名空间
调用方式就是命名使用范围运算符::

但是这样看起来是有点冗余的,而且命名空间的域封闭性不是很高,是可以扩展的,
在某些大型项目中,可能依旧会存在名词冲突的问题
namespace color
{
    enum Color
    {
        RED,
        BLUE
    };
} // namespace color

namespace feeling
{
    enum Feeling
    {
        EXCITED,
        BLUE
    };
}

解决思路2

为每个含有相同命名的枚举外面增加一个自定义的结构体

struct color{
  enum Type { RED = 102, YELLOW, BLUE };
};
struct feeling{
  enum Type { EXCITED = 102, SAD, BLUE };
};

int main() {

    /* 使用方式1 */
    color::Type c = color::BLUE; //c变量的枚举值是103
    feeling::Type f = feeling::BLUE; //f变量的枚举值是101
    
    /* 使用方式2 */
    color myc;
    int b0 = myc.BLUE;
    feeling myf;
    int b1 = myf.BLUE;

  return 0;
}

2、隐式转换成int

3、枚举变量的实际类型无法明确指定

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值