当未定义的行为时,将double转换为整数

2 c c++

以下是:

double t = 244.233;
int a = (int) t;
Run Code Online (Sandbox Code Playgroud)

是不是未定义的行为,因为244可以适应内部int我做对了吗?否则,如果它是更大的值而不是244不适合内部int这将是未定义的,我做对了吗?

我对C如何做到这一点更感兴趣.但这种情况与C++有区别吗?

Bar*_*rry 6

来自[conv.fpint]:

可以将浮点类型的prvalue转换为整数类型的prvalue.转换截断; 也就是说,丢弃小数部分.如果截断的值无法在目标类型中表示,则行为未定义.

因此,例如,将66666.66转换为a int16_t将是未定义的行为,但转换66.66就好了.


Bau*_*gen 5

从我最喜欢的文件:

浮点类型的prvalue可以转换为任何整数类型的prvalue.小数部分被截断,即,小数部分被丢弃.如果该值不适合目标类型,则行为未定义(即使目标类型为无符号,模运算也不适用).

是的,你是对的.(对于C++,但有人已经为C发布了几乎相同的标准报价)