以下是:
double t = 244.233;
int a = (int) t;
Run Code Online (Sandbox Code Playgroud)
是不是未定义的行为,因为244可以适应内部int我做对了吗?否则,如果它是更大的值而不是244不适合内部int这将是未定义的,我做对了吗?
我对C如何做到这一点更感兴趣.但这种情况与C++有区别吗?
来自[conv.fpint]:
可以将浮点类型的prvalue转换为整数类型的prvalue.转换截断; 也就是说,丢弃小数部分.如果截断的值无法在目标类型中表示,则行为未定义.
因此,例如,将66666.66转换为a int16_t将是未定义的行为,但转换66.66就好了.