2

是否保证

  • 将 true 分配给浮点变量会导致 1.0f

  • 将 false 分配给浮点变量会导致 0.0f

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

4

2 回答 2

3

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

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

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

将零值、空指针值或空成员指针值转换为 false;任何其他值都将转换为 true。

另外,我想您需要知道它保证为零,并且 1 可以表示为float. 上面暗示了这一点(否则转换无法按描述进行),但我不确定是否以及在何处明确说明了哪些整数值需要在float.

引用来自 N3337,它几乎完全是 C++11。此后标签已更改为“C++”而不是“C++11”——C++03 中的规则相同,但措辞和段落编号可能不同。

于 2012-07-12T08:31:21.793 回答
3

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

[...]类型的纯右值bool可以转换为类型的纯右值intfalse变为零和true 变一。这些转换称为积分促销

第 4.9 节第 2 段:

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

(如果它们遵循 IEEE 754 标准,则零和一都可以精确地(没有损失)表示为浮点数。)

于 2012-07-12T08:46:13.550 回答