【发布时间】:2010-11-12 19:27:12
【问题描述】:
如果我将 double 转换为 int,但 double 的值超出范围会怎样?
假设我做了这样的事情?
double d = double(INT_MIN) - 10000.0;
int a = (int)d;
a 的值是多少?是未定义的吗?
【问题讨论】:
如果我将 double 转换为 int,但 double 的值超出范围会怎样?
假设我做了这样的事情?
double d = double(INT_MIN) - 10000.0;
int a = (int)d;
a 的值是多少?是未定义的吗?
【问题讨论】:
David Thornley 已经完全回答了这个问题。但是,要在您的代码中处理这种情况,您应该考虑boost's numeric_cast。
double d = double(INT_MIN) - 10000.0;
int a = boost::numeric_cast<int>(d);
如果d 对于int 来说太大,这将在运行时引发异常。
【讨论】:
没错。引用标准 4.9,“如果截断的值不能在目标类型中表示,则行为未定义。”
【讨论】: