为什么在c++中不能将enum类的值打印为enum



尝试打印enum类对象时出错。我得到的错误,而试图打印这个。我哪里做错了?

#include <iostream>
using namespace std;
int main()
{
enum weekdays{sunday,monday,tuesday};
cout<<monday<<endl; // getting value as 1 as i expected.

enum class Weekday{sunday,monday,tuesday};
enum class Holiday{sunday,saturday};
Weekday wday=Weekday::monday; 
cout<<Weekday::monday<<endl; // getting error
cout<<wday<<endl; //getting error
return 0;
}

为什么不能将enum类的值打印为c++中的enum

因为枚举类不同于枚举。其中一个区别是,与enum不同,enum类实例不会隐式地转换为底层整数类型。由于没有为枚举类定义输出流插入操作符,因此不能将其插入到输出流中。

我做错了什么?

错误在于假定枚举类的行为与枚举相同。

如果我想知道保存在Weekday中的值wday=Weekday::monday;我怎么知道?? ?

通过显式地将其转换为。可以使用静态强制转换。

由于enum class具有比enum更强的类型安全性,因此需要显式请求转换为底层整数值:

#include <type_traits>
...
std::cout << static_cast<std::underlying_type_t<Weekday>>(Weekday::monday) << 'n';

最新更新