为什么不"cout << Color :: green"编译?

vis*_*ter -2 c++ enum-class

我在测试中遇到了这个问题.

我知道我可以这样做:

enum class Color { red, green = 1, blue };
Color c = Color::blue;

if( c == Color::blue )
cout << "blue\n";
Run Code Online (Sandbox Code Playgroud)

但是,当我更换cout << "blue\n";使用cout << Color::green,它甚至不进行编译.为什么不编译?

das*_*ght 5

发生此错误是因为C++没有预定义的打印方式enum.您需要根据需要定义<<用于打印Color枚举类型对象的运算符.

例如,如果要打印数值,请将颜色转换为int运算符内部:

ostream& operator<<(ostream& ostr, const Color& c) {
    ostr << (int)c;
    return ostr;
}
Run Code Online (Sandbox Code Playgroud)

演示.

如果您希望将enum值打印为文本,请参阅此问答以获取示例实现.

  • 这不是一个优点,这是一个范围的枚举?未转换的枚举将在转换后使用库重载 (2认同)