std::to_underlying

来自cppreference.com
< cpp‎ | utility
 
 
 
在标头 <utility> 定义
template<class Enum >
constexprstd::underlying_type_t<Enum> to_underlying( Enum e )noexcept;
(C++23 起)

转换枚举到其底层类型。等价于 returnstatic_cast<std::underlying_type_t<Enum>>(e);

目录

[编辑]参数

e - 要转换的枚举值

[编辑]返回值

Enum 的底层类型的整数值,从 e 转换得到。

[编辑]注解

std::to_underlying 能用于避免将枚举类型转换成其底层类型以外的整数类型。

功能特性测试标准功能特性
__cpp_lib_to_underlying202102L(C++23)std::to_underlying

[编辑]示例

#include <cstdint>#include <iomanip>#include <iostream>#include <type_traits>#include <utility>   enumclass E1 :char{ e }; static_assert(std::is_same_v<char, decltype(std::to_underlying(E1::e))>);   enumstruct E2 :long{ e }; static_assert(std::is_same_v<long, decltype(std::to_underlying(E2::e))>);   enum E3 :unsigned{ e }; static_assert(std::is_same_v<unsigned, decltype(std::to_underlying(e))>);   int main(){enumclass ColorMask :std::uint32_t{ red =0xFF, green =(red <<8), blue =(green <<8), alpha =(blue <<8)};   std::cout<<std::hex<<std::uppercase<<std::setfill('0')<<std::setw(8)<< std::to_underlying(ColorMask::red)<<'\n'<<std::setw(8)<< std::to_underlying(ColorMask::green)<<'\n'<<std::setw(8)<< std::to_underlying(ColorMask::blue)<<'\n'<<std::setw(8)<< std::to_underlying(ColorMask::alpha)<<'\n';   // std::underlying_type_t<ColorMask> x = ColorMask::alpha; // 错误:无已知转换[[maybe_unused]]std::underlying_type_t<ColorMask> y = std::to_underlying(ColorMask::alpha);// OK}

输出:

000000FF 0000FF00 00FF0000 FF000000

[编辑]参阅

获得给定枚举类型的底层整数类型
(类模板)[编辑]
(C++11)
检查类型是否为枚举类型
(类模板)[编辑]
检查类型是否为有作用域枚举类型
(类模板)[编辑]
close