我无法理解枚举在C ++中是如何工作的

时间:2013-03-02 10:01:33

标签: c++

我刚刚使用C ++中的枚举,我仍然无法理解这两个例子:

enum Colors {
    WHITE, BLACK, RED
};

Colors colors[3];
colors[0] = WHITE; // it's OK

enum Colors {
    WHITE, BLACK, RED
};

int colors[3];
colors[0] = WHITE; // it's OK

我知道枚举的元素从0到n-1计数,所以它们都有值。但为什么我必须使用颜色名称的枚举来声明一个数组?为什么我不能使用int代替?或者我可以吗?

感谢。

3 个答案:

答案 0 :(得分:2)

enum允许您在0n-1之间为您的值使用英文名称。对于下一个开发人员来说,它更漂亮,更容易理解

int myColor = Colors::WHITE;

大于

int myColor = 0; // What color is this? I don't know

答案 1 :(得分:2)

  

但为什么我必须使用枚举的颜色名称来声明一个数组?为什么我不能使用int代替?或者我可以吗?

你可以:

enum {
    WHITE,
    BLACK
};

int arr[3];
arr[0] = WHITE;

答案 2 :(得分:2)

  

但为什么我必须使用枚举的颜色名称来声明一个数组?为什么我不能使用int代替?或者我可以吗?

是的,您可以将变量声明为int,而不是将其声明为Colors,但使用enum的重点是两者开发人员和编译器可以判断可接受的值是有限的。更重要的是,编译器可以使用此信息来发布诊断并帮助开发人员避免错误:

int color1 = WHITE; // OK
int color1 = 0; // OK, no diagnostic, but what does 0 mean ?
Colors color2 = WHITE; // OK
Colors color2 = 0; // compilation warning or error