14-3 列表初始化有底层类型的枚举对象(C++17)

列表初始化有底层类型的枚举对象(C++17)

1. 使用列表初始化,隐式转换为强枚举类型

​ 从C17开始,可以直接使用列表初始化有底层类型的枚举对象,在g中下面的代码使用-std=c++17是符合书上说法的,但VS不可以。

enum class Color
{
red,
green,
blue
};

int main()
{
Color c{5}; //编译成功
Color c1 = 5; //编译失败
Color c2 = {5}; //编译失败
Color c3(5); //编译失败
}

2. 实际的应用场景

在开发过程中,使用列表初始化来隐式转换为强枚举类型的一个应用场景就是:需要一个不能隐式转换为整型,但比较大小的逻辑与整型一致的一种数据类型。

#include <iostream>
enum class Index : int
{
};

int main()
{
Index a{5};
Index b{10};

std::cout << "a < b is "
<< std::boolalpha
<< (a < b) << std::endl;
}

//输出结果:a < b is true