-->

C ++ 11枚举类的实例化(C++11 enum class instantiation)

2019-09-24 06:46发布

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

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

此外,发送X(id)作为参数传递给函数期待X型PARAM编译为好。 我不知道如果结果总是正确的,或者它只是一个奇怪的编译器行为。

然而,试图做X myX(id); 代替上述导致编译错误:

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

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

  1. 是否有可能构建具有整体类型作为参数枚举类对象?
  2. 如果1是真的,为什么X myX(id)不起作用?

Answer 1:

你是不是构建与语法枚举。 相反,你正在使用的替代明确的转换语法从投UINT32enum class X 。 例如,它可以明确地蒙上了一倍,这样的一个int:

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

见这个堆栈溢出后所有你可以在C ++中使用的各种投语法。

您的代码可以等效地与更多的共同铸就的语法是这样写的:

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


文章来源: C++11 enum class instantiation