为什么不能直接为作用域枚举类成员指定作用域枚举类成员呢?

时间:2018-10-01 16:59:50

标签: c++

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;
}

有什么区别?

3 个答案:

答案 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;
}

在线测试:

https://onlinegdb.com/Syw-qgg97