【发布时间】:2013-06-21 00:01:13
【问题描述】:
C++11 4.9 浮点-积分转换[conv.fpint]:
浮点类型的纯右值可以转换为整数类型的纯右值。转换截断;也就是说,小数部分被丢弃。如果截断的值无法在目标类型中表示,则行为未定义。
如果值为-0.0,是否定义了行为?归结为“截断的值是否不能在目标类型中表示”。可以表示零。可以负零吗?在这种情况下,这两个零值是区分还是不区分?
【问题讨论】:
-
负零与正零相同,比较方式。两者的值都为零...
-
当然。但这并不能说明截断的值(如果该值为 -0.0)是否可以用
unsigned类型表示。 -
这有两个部分:一个是“截断部分”。二是用整数类型表示。你同意 -0.0 的截断部分是 0 吗?
-
我认为至少还不清楚,因此是这个问题。如果此处截断的值确实是 +0,那么肯定会定义行为。
-
不要混淆类型和值。在抽象意义上,“截断值”只是一个数字。它实际上只能是零。
标签: c++ floating-point type-conversion language-lawyer