假设我有以下代码,它尝试将 double 值“向下转换”为 uint8_t:
uint8_t downcast(uint8_t *down1, uint8_t *down2)
{
//the usual nullptr checks
double fval = 100.0; //fits the uint8_t domain range
*down1 = (uint8_t)fval; //should work...
fval = 1000.0; //does not fit uint8_t domain range
*down2 = (uint8_t)fval; //will this work??
}
我看过一些建议进行这种“量化转换”的帖子,但我不确定这是否正确。我似乎记得读过,其值超出输出域的 double var 将导致强制转换(C 或 static_cast
想法?谢谢,查尔斯。
第二次演员的行为未定义。
C23 §6.3.1.4 ¶1 当标准浮点类型的有限值转换为 bool 以外的整数类型时,小数部分将被丢弃(即该值被截断为零)。如果整数部分的值不能用整数类型表示,则行为未定义。