【发布时间】:2020-06-27 09:47:57
【问题描述】:
- 编译器:clang++
- c++ 标准:c++20
我尝试运行代码,结果非常符合我的预期。
#include <iostream>
using namespace std;
int main()
{
enum class Num : int
{
one = 1,
two = 2,
zero = 0
};
Num e = Num::one;
auto a = static_cast<std::underlying_type_t<Num>>(e);
cout << "-----------" << endl;
cout << a << endl;
cout << "-----------" << endl;
return 0;
}
结果:
-----------
1
-----------
但是当我做了一个小修改,将枚举类的底层类型从 int 更改为 int8_t 时,结果出乎意料。
#include <iostream>
using namespace std;
int main()
{
enum class Num : int8_t // from 'int' to 'int8_t'
{
one = 1,
two = 2,
zero = 0
};
Num e = Num::one;
auto a = static_cast<std::underlying_type_t<Num>>(e);
cout << "-----------" << endl;
cout << a << endl;
cout << "-----------" << endl;
return 0;
}
结果:
-----------
-----------
这里发生了什么?
【问题讨论】:
标签: c++ static-cast enum-class