C++11 枚举类实例化

标签 c++ c++11 visual-studio-2012 construction enum-class

我遇到了以下形式的枚举类变量实例化,它在 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. 是否可以构造一个整数类型作为参数的枚举类对象?
  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/

相关文章:

c++ - opencv wasm 构建在 Windows 上失败

c++ - 递归生成给定子集大小的所有组合 (C++)

visual-studio-2012 - 更改组件文件夹的位置

visual-studio - 在 Visual Studio 中同时使用垂直和水平拆分的最简单方法是什么?

c++ - SFINAE 在创建 "is_iterable"特征时出现问题 - 这是 gcc 错误吗?

c++ - 正则表达式 : Numeric + alphanum + special characters Only

c++ - static_cast 整数到枚举的转换

c++ - 检查父构造函数是否有参数

c++ - Utf-8 编码 visual studios 十进制值

asp.net - 调试时无法对 ASP.NET 代码进行更改