我遇到了以下形式的枚举类变量实例化,它在 VS2012 下编译时没有任何警告或错误:
UINT32 id;
enum class X {apple, pear, orange};
X myX = X(id);
此外,将 X(id)
作为参数发送给期望编译 X 类型参数的函数。
我不确定结果是否始终正确,或者这只是一种奇怪的编译器行为。
但是,尝试执行 X myX(id);
而不是上面的操作会导致编译错误:
error C2440: 'initializing' : cannot convert from 'UINT32' to 'X'. Conversion to enumeration type requires an explicit cast (static_cast,C-style cast or function-style cast).
阅读 C++11 标准并没有帮助我理解。 所以我有 2 个关于这个主题的问题:
- 是否可以构造一个整数类型作为参数的枚举类对象?
- 如果 1 为真,为什么
X myX(id)
不起作用?
最佳答案
您没有使用该语法构造枚举。相反,您使用另一种显式转换语法从 UINT32
转换为 enum class X
。例如,可以像这样将 double 显式转换为 int:
double p = 0.0;
int f = int(p)
参见 this stack overflow post对于您可以在 C++ 中使用的所有各种强制转换语法。
您的代码可以等效地使用更常见的转换语法编写,如下所示:
UINT32 id;
enum class X {apple, pear, orange};
X myX = (X)id;
关于C++11 枚举类实例化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12957499/