如果我将双精度浮点数转换成整型,但双精度浮点数的值超出了整型范围,会发生什么?
假设我像这样做:
double d = double(INT_MIN) - 10000.0;
int a = (int)d;
a的值是多少?它是否未定义?
确切地说,引用标准中的话,4.9节:"如果被截断的值不能在目标类型中表示,则其行为未定义。"
David Thornley已经完整回答了这个问题。但是,为了在您的代码中处理此情况,您应该考虑使用boost的numeric_cast。
double d = double(INT_MIN) - 10000.0;
int a = boost::numeric_cast<int>(d);
d
太大,超过了int
的范围,那么这将在运行时抛出异常。