c++ enum枚举类型能够存储的值不只限于声明的几种原理辨析

在对标准库输入流的简单研究以及各种使用上发现,枚举常亮类型也可以存储不在声明列表中的值,例如输入流的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,买错了...),关于这一点问题也希望大神能够帮忙解答,是书错了吗?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值