C++枚举
- 枚举的基础用法不不再赘述
- 枚举的三点问题
- 1、作用域问题
- 解决思路1
- 解决思路2
- 2、隐式转换成int
- 3、枚举变量的实际类型无法明确指定
枚举的基础用法不不再赘述
枚举的三点问题
1、作用域问题
举个例子,颜色有blue代表蓝色,心情有blue代表忧郁。
以下是示例代码,存在语法错误(BLUE冲突)
enum Color
{RED,BLUE
};
enum Feeling
{EXCITED,BLUE
};int main()
{Color a = BLUE; // errorFeeling b = EXCITED;std::cout << a << ":" << b << std::endl;return 0;
}
解决思路1
为每个含有相同命名的枚举外面增加一个自定义的命名空间
。
调用方式就是命名使用范围运算符::
但是这样看起来是有点冗余的,而且命名空间的域封闭性不是很高,是可以扩展的,
在某些大型项目中,可能依旧会存在名词冲突的问题
namespace color
{enum Color{RED,BLUE};
} // namespace colornamespace 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变量的枚举值是103feeling::Type f = feeling::BLUE; //f变量的枚举值是101/* 使用方式2 */color myc;int b0 = myc.BLUE;feeling myf;int b1 = myf.BLUE;return 0;
}