我是C++编程的初学者。
今天我遇到了一个新话题:强类型enum。我研究了一下,但到目前为止,我还不明白为什么我们需要这个,它有什么用?
例如,如果我们有:
enum xyz{a, b, c};
/*a = 0, b = 1, c = 2, (Typical C format)*/为什么我们需要这样写:
enum class xyz{a, b, c};我们在这里想要做什么?我最重要的疑问是如何使用它。你能提供一个小例子,让我明白吗?
发布于 2012-09-25 18:34:47
好的,第一个例子:旧式枚举没有自己的作用域:
enum Animals {Bear, Cat, Chicken};
enum Birds {Eagle, Duck, Chicken}; // error! Chicken has already been declared!
enum class Fruits { Apple, Pear, Orange };
enum class Colours { Blue, White, Orange }; // no problem!其次,它们隐式地转换为整型类型,这可能导致奇怪的行为:
bool b = Bear && Duck; // what?最后,您可以指定C++11枚举的底层整数类型:
enum class Foo : char { A, B, C};以前,没有指定底层类型,这可能会导致平台之间的兼容性问题。编辑在注释中指出,您还可以在C++11中指定“旧样式”枚举的底层整数类型。
发布于 2012-09-25 18:35:05
在this IBM page上有一篇关于枚举的好文章,它非常详细,写得也很好。以下是一些重要的要点:
作用域枚举解决了常规枚举带来的大多数限制:完整的类型安全、定义良好的底层类型、作用域问题和转发声明。
发布于 2012-09-25 18:33:38
enum class的值实际上是enum class类型,而不是C枚举的underlying_type类型。
enum xyz { a, b, c};
enum class xyz_c { d, f, e };
void f(xyz x)
{
}
void f_c(xyz_c x)
{
}
// OK.
f(0);
// OK for C++03 and C++11.
f(a);
// OK with C++11.
f(xyz::a);
// ERROR.
f_c(0);
// OK.
f_c(xyz_c::d);https://stackoverflow.com/questions/12581064
复制相似问题