C ++ 11枚举类实例化

时间:2012-10-18 14:51:41

标签: 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);而不是上述操作会导致编译错误:

  
    

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

  

阅读C ++ 11标准并没有帮助我理解。 所以我对这个问题有2个问题:

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

1 个答案:

答案 0 :(得分:2)

您没有使用该语法构造枚举。相反,您使用替代的显式强制转换语法从UINT32转换为enum class X。例如,可以将double显式地转换为int,如下所示:

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

有关可在c ++中使用的各种强制转换语法,请参阅this stack overflow post

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

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