【问题标题】:What happens if I cast a double to an int, but the value of the double is out of range?如果我将 double 转换为 int,但 double 的值超出范围会怎样?
【发布时间】:2010-11-12 19:27:12
【问题描述】:

如果我将 double 转换为 int,但 double 的值超出范围会怎样?

假设我做了这样的事情?

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

a 的值是多少?是未定义的吗?

【问题讨论】:

    标签: c++ casting


    【解决方案1】:

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

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

    如果d 对于int 来说太大,这将在运行时引发异常。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-05-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-07-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多