是否保证
为float变量赋值true会导致1.0f
为浮点变量赋值false会导致0.0f
测试上述变量的真值是否按预期返回(分别为真和假?)
答案 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标准,零和一个可以完全表示(没有丢失)为浮点数。)