前言
C++11 中引入了强类型的 enum class
类型(或称为枚举类),但是有一点比较尴尬的是,std::cout
标准流不支持输出 enum class
类型。
比如以下代码:
#include <iostream>
int main()
{
enum class Color {
red, green = 20, blue };
Color r = Color::blue;
std::cout << r;
}
在编译时,会有报错,GCC 编译错误信息:
main.cpp:8:14: error: no match for 'operator<<' (operand types are 'std::ostream' {aka 'std::basic_ostream<char>'} and 'main()::Color')
8 | std::cout<<r;
| ~~~~~~~~~^~~
| | |
| | main()::Color
| std::ostream {aka std::basic_ostream<char>}
MSVC编译错误信息:
E0349 没有与这些操作数匹配的 "<<" 运算符
那么,如何打印 enum class
呢?
解决方案
方法一
enum class
底层类型其实是 int 类型,那么我们可以直接进行强制类型转换即可:
enum class Color {
red, green = 20, blue };
Color r