为float指定true值

时间:2012-07-12 08:18:50

标签: c++ floating-point boolean implicit-conversion

是否保证

  • 为float变量赋值true会导致1.0f

  • 为浮点变量赋值false会导致0.0f

  • 测试上述变量的真值是否按预期返回(分别为真和假?)

2 个答案:

答案 0 :(得分:3)

是。对于前两个,4.9 / 2(“浮动积分转换”):

  

如果源类型为bool,则值false将转换为零和   值true将转换为一个。

对于最后一个,4.12 / 1(“布尔转换”):

  

零值,空指针值或空成员指针值   转换为假;任何其他值都转换为true。

另外我想你需要知道它保证为零,一个可以表示为float的值。这是由上述暗示的(否则转换不能像所描述的那样),但我不确定它是否以及明确指出哪些整数值需要在float中准确表示。

报价来自N3337,几乎完全是C ++ 11。标签后来改为“C ++”而不是“C ++ 11” - C ++ 03中的规则是相同的,但措辞和段落编号可能不同。

答案 1 :(得分:3)

引用标准(N3290),第4.5节第6,7节:

  

[...] bool类型的prvalue可以转换为int类型的prvalue,其中false变为零true   成为一体。这些转化称为整体促销

第4.9节第2段:

  

整数类型或无范围枚举类型的prvalue可以转换为浮动的prvalue   点类型。如果可能,结果是准确的。如果转换的值在可以的值范围内   表示但是值不能准确表示,它是实现定义的选择   下一个更低或更高的可表示值。

(如果符合IEEE 754标准,零和一个可以完全表示(没有丢失)为浮点数。)