将浮点数转换为整数定义的行为

ST3*_*ST3 -1 c++ floating-point undefined-behavior

今天发现VS2010不支持roundC++项目中的功能.有关该功能的信息已在此处找到.还注意到也没有trunc功能.

所以尝试了一些东西并注意到一些可能有助于这种情况的行为.


float a = 2.999;
int b = (int)a;   //gives 2
Run Code Online (Sandbox Code Playgroud)
float a = -2.999;
int b = (int)a;   //gives -2
Run Code Online (Sandbox Code Playgroud)

这可以作为截断,所以我可以使用它,但是我不想使用导致未定义行为的代码.所以想问一下这是定义的还是未定义的行为.

编辑:因为我正在使用VS2008,所以我不会问C++ 11.

Dan*_*rey 5

它明确定义于

4.9浮动积分转换[conv.fpint]

1浮点类型的prvalue可以转换为整数类型的prvalue.转换转发; 也就是说,丢弃小数部分.如果截断的值无法在目标类型中表示,则行为未定义.[ 注意:如果目的地类型是bool,请参见4.12.- 结束说明 ]