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

时间:2009-07-21 21:35:23

标签: c++ casting

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

让我说我做这样的事情?

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

a的价值是多少?是不确定的?

2 个答案:

答案 0 :(得分:19)

正。引用标准4.9,“如果截断的值无法在目标类型中表示,则行为未定义。”

答案 1 :(得分:4)

David Thornley已经完全回答了这个问题。但是,要在代码中处理这种情况,您应该考虑boost's numeric_cast

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

如果dint来说太大,这将在运行时抛出异常。