C++语法 enum类型(枚举类型)
enum { red, green, blue } c;
enum { id = 10, val = 1000, what } tmp;
enum 类型可以比较方便地将 特定标识符 与 值 对应上,便于阅读。
介绍:
枚举类型(enumeration)是C++中的一种派生数据类型,它是由用户定义的若干枚举常量的集合。
如果一个变量只有几种可能的值,可以定义为枚举(enumeration)类型。
所谓”枚举”是指将变量的值一一列举出来,变量的值只能在列举出来的值的范围内。
创建枚举,需要使用关键字 enum。枚举类型的一般形式为:
enum 枚举名{
标识符[=整型常数],
标识符[=整型常数],
...
标识符[=整型常数]
} 枚举变量;
如果枚举没有初始化,即省掉=整型常数
时, 则从第一个标识符开始。
如果枚举没有枚举名,则无法通过 typename::value
调用标识。
例如,下面的代码定义了一个颜色枚举,变量 c 的类型为 color。最后,c 被赋值为 blue
。
enum color { red, green, blue } c;
c = blue;
默认情况下,第一个名称的值为 0,第二个名称的值为 1,第三个名称的值为 2,以此类推。
但是你也可以给名称赋予一个特殊的值,只需要添加一个初始值即可。
例如,在下面的枚举中,green
的值为 5。
enum color { red, green=5, blue };
在这里,blue
的值为 6,因为默认情况下,每个名称都会比它前面一个名称大 1,但 red
的值依然为 0。
另外,为了防止 enum 可能造成的污染,在 C++11 后还有 enum class 的用法
enum class hello { a = 114, b = 514, c } tmp2;
在 OI 中不是很需要这个,因为它并不能直接 cout 输出,且 enum hello 也可以通过 hello::a
表示标识符。
具体参考实例。
实例:
随便写了一个。
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define INF 0x3f3f3f3f3f3f3f3f
void up(int &x,int y) { x < y ? x = y : 0; }
void down(int &x,int y) { x > y ? x = y : 0; }
#define N ((int)())
enum { red, green, blue } c;
enum node { id = 10, val = 1000, what } tmp;
enum class node2 { id = 20, val = 2000, what } tmp2;
signed main()
{
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
// freopen("check.in","r",stdin);
// freopen("check.out","w",stdout);
cout << c << '\n'; // 默认为 0
c = red; cout << c << '\n';
c = green; cout << c << '\n';
c = blue; cout << c << '\n';
cout << "-----\n";
cout << tmp << '\n'; // 默认为 0
tmp = val; cout << tmp << '\n';
tmp = node::what; cout << tmp << '\n'; // what 的值是 val 的值 + 1
tmp2 = node2::what; // cout << tmp2 << '\n'; // 然而没法输出……
return 0;
}
输出:
0
0
1
2
-----
0
1000
1001
参考文献:
[1] https://www.runoob.com/cplusplus/cpp-data-types.html
[2] https://learn.microsoft.com/zh-cn/cpp/cpp/enumerations-cpp?view=msvc-170