cout
无范围的枚举直接起作用:
#include <iostream>
using namespace std;
enum color { red, green, blue };
int main()
{
cout << color::green;
return 0;
}
带有枚举枚举的枚举不能:
#include <iostream>
using namespace std;
enum class color { red, green, blue };
int main()
{
cout << color::green;
return 0;
}
有什么区别?
答案 0 :(得分:4)
之所以可行,是因为未作用域的枚举可以隐式转换为整数,而作用域枚举则不能,并且需要显式转换:
cout << static_cast<int>(color::green);
答案 1 :(得分:1)
无作用域的枚举会自动转换为某些整数类型。这就是为什么它将仅打印出1
而不是green
的原因。
作用域枚举不能隐式转换为整数,并且operator<<
没有其他std::cout
,因此无法编译。
答案 2 :(得分:0)
也许像char那样的最佳属性可以帮助您。
#include <iostream>
using namespace std;
enum class Color { red='r', green='g', blue='b' };
int main()
{
cout << "Print opt attribute: " << static_cast<char>(Color::green);
return 0;
}
在线测试: