gpt4 book ai didi

C++11 枚举类实例化

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:11:57 27 4
gpt4 key购买 nike

我遇到了以下形式的枚举类变量实例化,它在 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com