在下面的代码中,对于所有可能的u64
值,函数fn
中的转换是否保证返回u64
值?从int-〉enum和返回的转换的用途是触发重载解析以选择特定的int函数。
using u64 = unsigned long; // 64bits
enum class EnumT : u64 {};
void Fn(u64 v) {/*...*/}
void Fn(EnumT e) {
u64 v = u64(e);
// ...
}
int main() {
u64 e = 1337;
Fn(EnumT(e));
return 0;
}
1条答案
按热度按时间lx0bsm1f1#
是的,这是保证正确工作。
术语:
enum struct
或enum class
声明的枚举称为限定作用域的枚举具有固定基础类型的枚举可以保存其基础类型的任何值(包括未由其任何枚举器表示的值)。它可以转换为该基础类型,* 反之亦然 *,而不会改变值。这是由标准保证的。