如果我将一个double类型的值转换为int类型,但该double值超出了int类型的范围,会发生什么?

5

如果我将双精度浮点数转换成整型,但双精度浮点数的值超出了整型范围,会发生什么?

假设我像这样做:

double d = double(INT_MIN) - 10000.0;
int a = (int)d;

a的值是多少?它是否未定义?

2个回答

19

确切地说,引用标准中的话,4.9节:"如果被截断的值不能在目标类型中表示,则其行为未定义。"


4

David Thornley已经完整回答了这个问题。但是,为了在您的代码中处理此情况,您应该考虑使用boost的numeric_cast

double d = double(INT_MIN) - 10000.0;
int a = boost::numeric_cast<int>(d);

如果d太大,超过了int的范围,那么这将在运行时抛出异常。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接