Chinaunix首页 | 论坛 | 博客
  • 博客访问: 612663
  • 博文数量: 79
  • 博客积分: 848
  • 博客等级: 军士长
  • 技术积分: 1800
  • 用 户 组: 普通用户
  • 注册时间: 2012-06-26 19:30
文章分类

全部博文(79)

文章存档

2015年(4)

2013年(39)

2012年(36)

分类: C/C++

2013-09-02 22:51:39

今天主要是总结一下新标准中枚举类型的enum的新的特性!
既然有了新的特性,那么就说明之前老的存在问题,我们就先来总结一下老的存在什么问题:
1、在之前的enum中,数据类型被默认的转换成了int,如果你并不想让它成为int时将会很难办!
2、之前的enum中的变量的可见范围,是包含enum声明的整个作用域,这样很容易造成变量命名的冲突。
3、之前的enum不能指定变量的数据类型,不能支持前置声明。
看到上面提到的这些问题之后,我们也不难想象新的enum的特性了:
1、你可以在声明的时候的指定变量的数据类型,而不仅仅支持int,但是该类型必须是能跟整形兼容的类型,例如:short、long、long long等,如果不显式的指定默认为int:

点击(此处)折叠或打开

  1. enum EE : unsigned long { EE1 = 1, EE2 = 2, EEbig = 0xFFFFFFF0U };
2、你可以使用前置声明:

点击(此处)折叠或打开

  1. enum class color : int;
  2. void print(color x);

  3. enum class color
  4. : int{
  5.     red,
  6.     blue,
  7.     white
  8. };

  9. void print(color x)
  10. {
  11.     if(x == color::red)
  12.     {
  13.         cout << "hello world" << endl;
  14.     }
  15. }


  16. int main()
  17. {
  18.     print(color::red);
  19.     return 0;
  20. }
3、强类型的enum,带class前缀的enum不再是全局可见,你要使用其中的成员,必须加上枚举的类型名,而且加上class前缀的枚举类型将不再支持隐式的类型转化。

点击(此处)折叠或打开

  1. enum class Color { red, blue };

  2. int a = red;//错误,red未声明

  3. int b = enum::red;//错误,不能进行隐式类型转换

  4. int c = static_cast<int>(enum::red)//正确


阅读(3325) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~