如果我将一个double转换为int会发生什么,但double的值超出范围?
让我说我做这样的事情?
double d = double(INT_MIN) - 10000.0;
int a = (int)d;
a的价值是多少?是不确定的?
答案 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);
如果d
对int
来说太大,这将在运行时抛出异常。