4

我遇到了以下形式的枚举类变量实例化,它在 VS2012 下编译时没有任何警告或错误:

UINT32 id;
enum class X {apple, pear, orange};
X myX = X(id);

此外,将X(id)作为参数发送给期望编译的 X 类型参数的函数。我不确定结果是否总是正确的,或者它只是一个奇怪的编译器行为。

但是,尝试执行X myX(id);上述操作会导致编译错误:

错误 C2440:“正在初始化”:无法从“UINT32”转换为“X”。转换为枚举类型需要显式转换(static_cast、C 样式转换或函数样式转换)。

阅读 C++11 标准并没有帮助我理解。所以我有两个关于这个问题的问题:

  1. 是否可以构造一个以整数类型作为参数的枚举类对象?
  2. 如果 1 为真,为什么X myX(id)不起作用?
4

1 回答 1

2

您没有使用该语法构建枚举。相反,您正在使用另一种显式转换语法来转换 from UINT32to enum class X。例如,可以将 double 显式转换为 int,如下所示:

double p = 0.0;
int f = int(p)

有关可以在 c++ 中使用的所有各种强制转换语法,请参阅此堆栈溢出帖子。

您的代码可以等效地使用更常见的强制转换语法编写,如下所示:

UINT32 id;
enum class X {apple, pear, orange};
X myX = (X)id;
于 2012-10-18T15:23:40.913 回答