C 11枚举类实例化



我遇到了以下形式的枚举类别变量实例化,并且在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标准并没有帮助我理解。所以我有两个问题:

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

您没有使用该语法构造枚举。相反,您正在使用替代的显式铸造语法将铸件从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;

相关内容

  • 没有找到相关文章

最新更新