3

这可能是一个有点奇怪的问题,但我真的不知道如何更好地表达它。

我刚刚发现我可以执行以下操作:

#include <iostream>

enum class Colour  // also works with plain old enum
{
    Red = 1,
    Green,
    Blue,
    Yellow,
    Black,
    White
};

int main()
{
    Colour c = Colour(15);  // this is the line I don't quite understand

    std::cout << static_cast<int>(c) << std::endl;  // this returns 15

    return 0;
}

所以现在我在类型的变量中有整数值 15 Colour

这里到底发生了什么?那是某种枚举“构造函数”吗?据我所知,整数值 15 没有放入枚举中,它仅存储在 variable 中c。首先,为什么这样的东西会有用——创建一个枚举中不存在的值?

4

2 回答 2

5

Colour(15)是一个创建枚举的临时(prvalue)实例的表达式,Colour用 value 初始化15

Colour c = Colour(15);从前面解释的表达式初始化一个新c的类型变量。Colour它相当于Colour c(15)

于 2017-12-07T16:59:27.327 回答
3

这里发生的情况是,如果您显式强制转换或默认初始化它们,C++11 中的强类型枚举仍然能够保存超出范围的值。在您的示例Colour c = Colour(15);中是完全有效的,即使Colour只有 1-6 有意义的值。

于 2017-12-07T19:32:17.107 回答