#include <iostream>
struct a
{
enum LOCAL_A
{
A1,
A2
};
};
enum class b
{
B1,
B2
};
int foo(int input)
{
return input;
}
int main(void)
{
std::cout<<foo(a::A1)<<std::endl;
std::cout<<foo(static_cast<int>(b::B2))<<std::endl;
}
a::LOCAL_A
是强类型枚举试图实现,但有一个小的区别:正常枚举可以转换为整数类型,而强类型枚举不能没有强制类型转换。如何自动将强类型枚举转换为int?
那么,有没有办法将一个强类型枚举值转换为一个整型没有转换?如果是,如何?
查看Khurshid Normuradov的回复。它来自'自然的方式',并且'C++编程语言(第4版)'的意图非常符合。它不是以“自动的方式”进行的,这对它来说很好。 – PapaAtHome
@PapaAtHome我不明白这比static_cast的好处。打字或代码清洁没有太多变化。这里的自然方式是什么?函数返回值? –
@ user2876962对我而言,好处在于,它不像Iammilind所说的那样是自动的或“无声的”。这可以防止缺陷找到错误。你仍然可以做演员,但你不得不考虑。这样你就知道你在做什么。 对我来说,这是“安全编码”习惯的一部分。我更喜欢没有自动完成转换,因为它可能会引入错误。如果你问我,那么在这个类别中,与类型系统相关的C++ 11中的一些变化就属于这一类。 – PapaAtHome