C++枚举体知识点小结
来源:互联网 发布:数据库如何检索字符串 编辑:程序博客网 时间:2024/06/18 08:26
C++枚举体类型小结
总结一下最近碰到到枚举体相关的知识点:
首先说明一下定义,枚举体是一种数据类型,用于存储用户定义的数据集合,一个枚举体类型定义后, 它和整型数据类型如 int, long 等的用法类似.
定义枚举体时要注意每个枚举体成员的值必须是整型.否则有如下错误:
enum en {a=3.7}; //expression is not an integral constant expression
枚举体类型的占用字节大小为一个int型的大小, 即4个字节.
enum flag {x=1, y=2, z=4, e=8};//sizeof(flag) = 4;
枚举体值的类型即是枚举体.
enum flag {x=1, y=2, z=4, e=8};flag f = flag::x;cout << typeid(f).name() << '\n';输出: 4flag
枚举体变量可以转换为整型,但是整型数不能直接转换成枚举体类型.
enum flag {x=1, y=2, z=4, e=8};int aa = flag::x; //ok flag f1 = 5; //cannot initialize a variable of type 'flag' with an rvalue of type 'int'
但是可以用类似用类的构造函数的方法初始化:
flag f2 = flag(4);
PS: 这里要注意的是枚举体的表示范围,像本例中 flag 的表示范围是[0, 15], 如果你用这个范围之外的数据来初始化枚举体变量的话, 例如flag f3 = flag(35)
, 编译器可能不会报错,但是结果却会是 undefined.所以最好不要用整型数初始化枚举体变量.
接着上一个问题, 介绍一下枚举体表示范围的求法:
首先求上限, 你需要找到一个最小正整数k, 使得enum flag {x=1, y=2, z=4, e=8};
中,枚举体成员最大值为8,满足上述条件的最小的正整数 k是5,所以上限为15.
关于下限,需要分两种情况讨论:
- 枚举体的值均为非负数,则下限为0, 比如上个例子中的flag
下限为0.
- 一般情况与上限求法类似, 你需要找到一个最小正整数k,使得
这里举一个例子,加深大家的理解:
定义枚举体: enum e3 {min=-10, max=1000};
这里首先给出它的表示范围为
验证代码:
#include <iostream>#include <numeric>using std::cout;enum flag {x=1, y=2, z=4, e=8}; //range 0:15enum e1 {dark, light}; //range 0:1int main(){ cout << sizeof(e1) << '\t' << sizeof(flag) << '\n'; cout << typeid(e1).name() << '\n'; int aa = flag::x; cout << aa << '\n'; //cannot initialize a variable of type 'flag' with an rvalue of type 'int' //flag f1 = 5; flag f2 = flag(5); cout << typeid(f2).name() << '\n'; cout << f2 << '\n'; flag f3 = flag(z|e); cout << f3 << '\n'; flag f4 = flag(99); // undefined cout << f4 << '\n'; // the following code doesn't work as I wish cout << std::numeric_limits<enum flag>::max() << '\n'; cout << std::numeric_limits<enum flag>::min() << '\n'; return 0;}
The C++ Programming Language Third Edition Bjarne Stroustrup
http://stackoverflow.com/questions/24826853/c-enumeration-range-bjarne-stroustrup-book
- C++枚举体知识点小结
- C枚举类型小结
- [C++]指针知识点小结
- C语言 函数、枚举 小结
- C++【小结】3 - 小知识点
- 知识点:枚举
- 结构体枚举的小结
- 枚举以及结构体小结
- 【Xcode学C-5】结构体、全局局部变量以及枚举变量的知识点
- 黑马程序员——C语言知识点总结之结构体和枚举
- 枚举小结
- 枚举小结
- 枚举小结
- 枚举小结
- 枚举小结
- c语言中的 结构体 枚举 以及typedef的使用(小结)
- 知识点小结
- 知识点小结
- Hyperledger Fabric 1.0 快速部署
- 数据库-SQL语句练手
- HDU1542
- Iterator的源码解析
- 首先执行js再进行href跳转
- C++枚举体知识点小结
- 06-图2 Saving James Bond
- Windows下JDK的下载及安装
- DOS远程桌面连接命令
- 改进卷积神经网络,你需要这14种设计模式(转载自机器之心微信号,mark一下当自己网络训练不好时可以看看)
- java语言的的基本特性和windows10环境下的搭建
- Python中的 XML-RPC
- 架构师之路
- 关于堆和栈的那些事儿