嘘~ 正在从服务器偷取页面 . . .

C++语法 enum类型(枚举类型)


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


文章作者: q779
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-ND 4.0 许可协议。转载请注明来源 q779 !
评论
  目录