枚举的基础用法不不再赘述
枚举的三点问题
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;
}