我遇到过以下形式的枚举类变量实例化,并且它在 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 为真,为什么
X myX(id)
不起作用?
您没有使用该语法构造枚举。相反,您使用替代的显式转换语法来进行转换UINT32
to enum class X
。例如,可以将 double 显式转换为 int,如下所示:
double p = 0.0;
int f = int(p)
See 这个堆栈溢出帖子 https://stackoverflow.com/questions/32168/c-cast-syntax-styles对于您可以在 C++ 中使用的所有各种强制转换语法。
您的代码同样可以使用更常见的强制转换语法来编写,如下所示:
UINT32 id;
enum class X {apple, pear, orange};
X myX = (X)id;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)