我遇到了以下形式的枚举类变量实例化,它在VS2012下编译没有任何警告或错误:
UINT32 id;
enum class X {apple, pear, orange};
X myX = X(id);
此外,将
X(id)
作为参数传递给期望X类型参数的函数也可以编译。
我不确定结果是否总是正确的,或者这只是奇怪的编译器行为。然而,尝试使用
X myX(id)
代替上述代码会导致编译错误:
阅读C++11标准并没有帮助我理解。 因此,我对此主题有2个问题:错误C2440:“初始化”:无法从“UINT32”转换为“X”。 枚举类型需要显式转换(static_cast、C风格转换或函数风格转换)。
- 是否可能使用整数类型作为参数构造枚举类对象?
- 如果问题1成立,为什么
X myX(id)
不能工作?
X
的构造函数,X
必须首先是一个类。X
是一个强类型枚举,虽然在其定义中使用了单词“class”,但它不是一个类。当您使用classname(stuff)
时,您将始终调用构造函数。 - Nicol Bolas