枚举"ghost values":干什么?
Enums "ghost values": what for?
我最近注意到一个让我很惊讶的事实:显然,您可以从enum
类型检索任何任意值,并将其分配给enum
变量,即使它不是enum
定义的一部分(我称之为"鬼值")。该变量仅取对应的整数值。
的例子:
#include <iostream>
enum myEnumType { ONE = 1, TWO = 2, THREE = 3 };
int main () {
myEnumType e;
e=myEnumType(8);
std::cout << e << std::endl;
}
输出8
。
我本以为这是不可能的,因为在我看来,它与枚举类型的约束函数不一致。这样做的原因是什么,最重要的是,它可能的效用是什么?
允许将int
转换为enum
。c++ 11引入了"枚举类"或"强枚举"或"作用域枚举"来处理这些问题。
其他好处包括它们的作用域和允许前向声明。
Stroustrup的页面上有很多细节,他特别提到了传统枚举的三个问题:- 常规枚举隐式转换为int,当某人不希望枚举作为整数时导致错误。
- 常规枚举将其枚举数导出到周围的作用域,从而导致名称冲突。
- 不能指定枚举的基础类型,这会导致混淆、兼容性问题,并且无法进行前向声明。
您正在调用传递8的enum的构造函数,因此分配给该实例的值为8。
当你调用enum的默认构造函数时也会发生同样的事情,它将0设置为默认值。
myEnumType e = myEnumType();
std::cout << e << std::endl; // prints 0
它打印0(尽管enum只初始化为ONE = 1, TWO = 2, THREE = 3),这里更好地解释:http://lifecs.likai.org/2010/07/c-enum-default-constructor.html
相关文章:
- CPP 中的瓦尔格林德和记忆泄漏:"Conditional jump or move depends on uninitialised values"
- 在没有 <limits.h> 或 <values.h> 的系统上查找SHRT_MAX
- 如何计算C++中非重复值的数量 std::map<Key,Values>
- std::copy with return values - 防止"expression: string iterators incompatible"的更好方法?
- XMVECTOR weird values
- Understanding glClearColor values
- Protobuf default values
- 热在Cygwin上安装Values.H标头(C / C ++)
- Windows API: UpdateLayeredWindow return values
- unordered_map pair of values c++
- QDataWidgetMapper and QDateEdit values
- 在C++,这是干什么用的?节点* &头,
- Access Key from Values and Value from Key
- C++: GetPrivateProfileStringA - random values?
- boost::multi_index_container语言 - equal_range values
- GCC 抑制警告"too small to hold all values of"
- Concatenating TFields values
- 错误 C2228:".values"的左侧必须具有类/结构/联合
- GetTickCount values on Windows 10
- 枚举"ghost values":干什么?