01-枚举(enum)

C中的enum

  • 语法:enum <枚举名>{ }
  • examp:
enum color{
	red,
	blue,
	green,
}

  • 允许非枚举值赋值给枚举类型, 允许其他枚举类型的值赋值给当前枚举类型 week = 100;  //ok
    week = One;  //ok
  • 不同类型的枚举值可以直接比较
if (week == One){
	printf("equaln");
}

  • 枚举值具有外层作用域,容易造成名字冲突
    int One = 100;  //error
    C++中的enum
  • 语法:enum <枚举名>{ }
  • examp:
enum color{
	red,
	blue,
	green,
}

  • 只能允许赋值枚举值
  • c++只允许同枚举类型值之间的比较

  • 枚举元素会暴露在外部作用域,不同的两个枚举类型,若含有相同枚举元素,则会冲突

C++中的enum class

  • 语法:enum class <枚举名>:<基本类型>{ }
  • <基本类型>可省略默认为int型。
  • examp:
enum class color:int{
	red,
	blue,
	green=10
}

  • 强枚举类型不会将枚举元素暴露在外部作用域(需使用color::red来访问)

  • 不相关(不同作用域)的两个枚举类型不能直接比较,编译报错

  • 枚举值默认为int型。
  • 枚举类型中的枚举常量,默认情况下从“0”开始计数,后面的枚举常量的值依次递增。

  • C 枚举类型支持不同类型枚举值之间赋值、以及数字赋值、比较,并且具有外层作用域。
  • C++ 中枚举不允许不同类型的值给枚举类型变量赋值,但仍然支持不同类型之间枚举进行比较,枚举符号常量具有挖外作用域。
  • C++ 强枚举类型不允许不同类型之间的赋值、比较,枚举常量值并不具有外层作用域。
comments powered by Disqus