在对标准库输入流的简单研究以及各种使用上发现,枚举常亮类型也可以存储不在声明列表中的值,例如输入流的iostate,其定义大致如下:
enum iostate{good = 0;
bad = 1L;
fail = 1L << 1;
eof = 1L << 2;
}
但是其变量却可以同时拥有多种状态,例如:
iostate flag = bad|eof;
在调试过程中对变量的值进行跟踪,发现其显示的值也为:bad|eof
对其存储原理简单了解后发现了答案。
enum枚举类型的实质还是整数类型,所以以上的不同值在内存中存储是这样的:
good: 0000 0000
bad : 0000 0001
fail : 0000 0010
eof : 0000 0100
其在内存中占用的大小具体就看能存储的值得最大值占多少位了,但是我自己测试发现自己的枚举类型都占4个字节(int),这一点与书上有点不符*
其能够存储的值就一共是这么多位数呢,即使只定义了那几种,但是其占用了那么多内存位数,所以那些值例如0000 0110之类的也是能够存储的。
所以枚举常量就可以存储 good|bad, eof|fail之类的值了!
真是方便!
*c++ primer plus(不是c++ primer,买错了...),关于这一点问题也希望大神能够帮忙解答,是书错了吗?