说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

有关Enumerations的问题

编辑:说三道四文库 发布时间:2018-02-21 05:12
HTML文档下载 WORD文档下载 PDF文档下载
在The C++ Programing language 中的
第4.8节中
An enumerator can be initialized by a constant-expression (§C.5) of integral type (§4.1.1). The range of an enumeration holds all the enumeration’s enumerator values rounded up to the nearest larger binary power minus 1 . The range goes down to 0 0 if the smallest enumerator is non-negative and to the nearest lesser negative binary power if the smallest enumerator is negative. This defines the smallest bit-field capable of holding the enumerator values. For example:
enum e1 { ddark, light }; / / range 0:1
enum e2 { a = 3, b = 9 }; / / range 0:15
enum e3 { min = -10, max = 1000000 }; / / range -1048576:1048575
A value of integral type may be explicitly converted to an enumeration type. The result of such a conversion is undefined unless the value is within the range of the enumeration. For example:
enum flag { x x=1 1, y y=2 2, z z=4 4, e e=8 8 }; / / range 0:15
enum flag f1  = 5; / / type error: 5 is not of type flag
enum flag f2  = flag(5) ; / / ok: flag(5) is of type flag and within the range of flag
enum flag f3  = flag g(z|e) ; / / ok: flag(12) is of type flag and within the range of flag
enum flag f4 = flag(99) ; / / undefined: 99 is not within the range of flag
The last assignment shows why there is no implicit conversion from an integer to an enumeration;
most integer values do not have a representation in a particular enumeration.


上面中的有关的range ,是什么意思啊!
enum  flag  {  x  x=1  1,  y  y=2  2,  z  z=4  4,  e  e=8  8  };  /  /  range  0:15  
应该是
enum  flag  {  x=1,  y =2 ,  z  =4 ,  e  =8  };  /  /  range  0:15  
贴错了!
应该是说你的枚举范围
范围的最大值是枚举的最大值的二进制位都填满,例如上面的最大值是八,那么就是1000,那么起范围的上限是1111,即15,范围最小值是在非负时为0,负数将去最近的较小负数,和最大值取法相同
那么flag(5)取道的值是多少?
当然是5了,但是表示他是flag类型的枚举了
enum  flag  {  x=1,  y =2 ,  z  =4 ,  e  =8  };  
但是  flag 中没有定义5阿!
但是他的范围里面包括5,也不要在里面定义了
哦!
明白了!
Thanks!
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘