2
#include <iostream>

using namespace std;

enum color {
    black=1, blue, green, cyan, red, purple, yellow, white

} colors;

int main(){
   color mycolor;
   mycolor = blue;

   cout << mycolor;

    return 0;
}

对象名称颜色有什么用途吗?我是否可以通过使用枚举来打印出任何这些颜色的名称,或者我只能打印出每种颜色对应的常数?

4

1 回答 1

4

对象名称颜色有什么用途吗?

是的:如果你想要一个类型为 的全局变量color,你可以在enum color.

我可以通过使用枚举打印出任何这些颜色的名称,还是只能打印出每种颜色对应的常数?

不,您将无法打印enum给定枚举值的成员名称,除非您在自己的代码中构建一个系统,通过该系统您可以将常量“解码”回字符串表示形式。一种常见的方法是创建一个字符串文字的并行数组:

#define TO_STR(X) #X

const char* color_names = {"none", TO_STR(black), TO_STR(blue), TO_STR(green), ...};

如您所见,无法将枚举转换为字符串不适用于编译时已知的枚举常量:您可以使用预处理器技巧对它们进行字符串化

将枚举值映射到字符串的另一种常见方法是使用std::map<color,std::string>. 它类似于并行数组,但您需要手动初始化它。它对“标志”枚举效果更好,即不使用顺序值的枚举。

于 2013-05-16T00:54:28.300 回答