相关博文:C/C++枚举探究
从C++到C++11
枚举体的声明和定义使用enum class或是enum struct,二者是等价的。使用enum class\enum struct不会与现存的enum关键词冲突。而且enum class/enum struct具有更好的类型安全和类似封装的特性(scoped nature)。
例1
附例1代码:
//小问学编程
#include<iostream>
#include<fstream>
using namespace std;
enum class Seaon
{
Spring,Summer,Autumn,Winter
};
enum struct XX
{
Spring,Summer,Autumn,Winter
};
int main()
{
Seaon s=Seaon::Spring;
XX x=XX::Spring;
cout<<(int)Seaon::Spring<<endl;//C语言的强制转换
cout<<static_cast<int>(Seaon::Autumn)<<endl;//C++的强制转换
}
作用域
例2:类内的枚举
附例2代码:
//小问学编程
#include<iostream>
using namespace std;
class Painter
{
public:
enum Color{
red,green,yellow};
public:
Painter()
{
}
void dis(Color c)
{
cout<<c<<endl;
}
};
int main()
{
Painter p;
p.dis(Painter::green);
return 0;
}
带作用域的枚举
例3:
附例3代码:
//小问学编程
#include<iostream>
using namespace std;
enum class Color{
red,green,yellow};
class Painter
{
public:
Painter()
{
}
void dis(Color c)
{
cout<<static_cast<int>(c)<<endl;
}
};
int main()
{
Painter p;
p.dis(Color::green);
return 0;
}
指定类型
默认的底层数据类型是int,用户可以通过:type(冒号+类型)来指定任何整型(除了wchar_t)作为底层数据类型。
例4
附例4代码:
//小问学编程
#include<iostream>
using namespace std;
enum class color:int{
red,green,yellow};
enum class colorX:char{
red,green,yellow};
int main()
{
//使用域运算符访问枚举体成员,强转后打印
cout<<static_cast<int>(color::green)<<endl;
cout<<static_cast<int>(colorX::green)<<endl;
return 0;
}