它能保证
发布于 2012-07-12 08:31:21
是。前两项,4.9/2 (“浮动-积分转换”):
如果源类型为bool,则将值false转换为零,并将值true转换为1。
对于最后一个,4.12/1 (“布尔转换”):
零值、空指针值或空成员指针值转换为false;任何其他值都转换为真。
另外,我认为您需要知道它保证为零,并且1可以表示为float的值。这是上面所暗示的(否则转换不能像所描述的那样运行),但我不确定它是否以及在哪里显式地说明了哪些整数值需要在float中准确表示。
引文来自N3337,几乎完全是C++11。自那以后,标签变成了"C++“,而不是"C++11”-- C++03中的规则是一样的,但措辞和段落编号可能有所不同。
发布于 2012-07-12 08:46:13
引用标准(N3290),第4.5节第6、7段:
..。
bool类型的prvalue可以转换为int类型的prvalue,false变为0,true变为1。这些转换被称为整体提升。
第4.9节第2段:
整数类型或非作用域枚举类型的prvalue可以转换为浮点类型的prvalue。如果可能的话,结果是准确的。如果正在转换的值位于可以表示的值范围内,但不能准确表示值,则它是下一个较低或更高可表示值的实现定义的选择。
(如果零和一符合IEEE 754标准,则可以精确地(不丢失)表示为浮标。)
https://stackoverflow.com/questions/11447709
复制相似问题