C++11 在 switch case 中混合枚举 class 和 unsigned int 将无法编译
C++11 mixing enum class and unsigned int in switch case will not compile
为什么这段代码不能编译,我该怎么做才能让它编译?
#include <iostream>
using namespace std;
enum class myEnum : unsigned int
{
bar = 3
};
int main() {
// your code goes here
unsigned int v = 2;
switch(v)
{
case 2:
break;
case myEnum::bar:
break;
}
return 0;
}
ideone:
prog.cpp: In function 'int main()':
prog.cpp:18:16: error: could not convert 'bar' from 'myEnum' to 'unsigned int'
case myEnum::bar:
无法在 GCC 和 Clang 中构建,可在 MSVC 2013 中运行。
enum class
的全部目的是使其成员无法直接与 int
进行比较,表面上提高了 C++11 相对于 C++03 的类型安全性.从 enum class
中删除 class
,这将编译。
引用 Bjarne 勋爵的话:
(An) enum class
(a scoped enumeration) is an enum
where the enumerators are within scope of the enumeration and no implicit conversions to other types are provided.
继续使用 enum class
的替代方法是向 myEnum
添加一个表示值 2 的新字段。然后你可以把unsigned int v
改成myEnum v
.
enum class myEnum : unsigned int
{
foo = 2,
bar = 3
};
int main() {
myEnum v = myEnum::foo;
switch(v)
{
case myEnum::foo:
break;
case myEnum::bar:
break;
}
}
你可以简单地使用这样的语法:
enum class Test { foo = 1, bar = 2 };
int main()
{
int k = 1;
switch (static_cast<Test>(k)) {
case Test::foo: /*action here*/ break;
}
}
enum 使用 classes 和 switch case 的示例,这是调用 enum class 来自另一个 class.
class MyClass
{
public:
enum class colors {yellow , blue , green} ;
};
int main ()
{
Myclass::colors c = Myclass::colors::yellow;
switch(c)
{
case Myclass::colors::yellow:
cout <<"This is color yellow \n"
case Myclass::colors::blue:
cout <<"This is color blue\n"
}
return 0 ;
}
为什么这段代码不能编译,我该怎么做才能让它编译?
#include <iostream>
using namespace std;
enum class myEnum : unsigned int
{
bar = 3
};
int main() {
// your code goes here
unsigned int v = 2;
switch(v)
{
case 2:
break;
case myEnum::bar:
break;
}
return 0;
}
ideone:
prog.cpp: In function 'int main()':
prog.cpp:18:16: error: could not convert 'bar' from 'myEnum' to 'unsigned int'
case myEnum::bar:
无法在 GCC 和 Clang 中构建,可在 MSVC 2013 中运行。
enum class
的全部目的是使其成员无法直接与 int
进行比较,表面上提高了 C++11 相对于 C++03 的类型安全性.从 enum class
中删除 class
,这将编译。
引用 Bjarne 勋爵的话:
(An)
enum class
(a scoped enumeration) is anenum
where the enumerators are within scope of the enumeration and no implicit conversions to other types are provided.
继续使用 enum class
的替代方法是向 myEnum
添加一个表示值 2 的新字段。然后你可以把unsigned int v
改成myEnum v
.
enum class myEnum : unsigned int
{
foo = 2,
bar = 3
};
int main() {
myEnum v = myEnum::foo;
switch(v)
{
case myEnum::foo:
break;
case myEnum::bar:
break;
}
}
你可以简单地使用这样的语法:
enum class Test { foo = 1, bar = 2 };
int main()
{
int k = 1;
switch (static_cast<Test>(k)) {
case Test::foo: /*action here*/ break;
}
}
enum 使用 classes 和 switch case 的示例,这是调用 enum class 来自另一个 class.
class MyClass
{
public:
enum class colors {yellow , blue , green} ;
};
int main ()
{
Myclass::colors c = Myclass::colors::yellow;
switch(c)
{
case Myclass::colors::yellow:
cout <<"This is color yellow \n"
case Myclass::colors::blue:
cout <<"This is color blue\n"
}
return 0 ;
}