首页 > 解决方案 > 使用表达式对双精度进行大括号初始化?

问题描述

我不习惯使用大括号初始化,但我想我会开始移植我的代码,因为它自 c++11 以来就已成为标准。

出现了一个问题:下面的表达是否正确?

double MyFunction(double a,double b,int c)
{
    double dx{(a-b)/c};
    //do things to dx
    return dx;
}

我正在使用基于“双”减法和整数除法的数学表达式的大括号初始化来初始化双精度数 dx。但这只是感觉不对,就像它可能会产生未定义的行为一样。上面的函数是否“正确”,它会返回预期的值而不被截断吗?

或者,我可以尝试double dx{(a-b)/double(c)};double dx = (a-b)/(double(c));

标签: c++floating-pointc++17implicit-conversionarithmetic-expressions

解决方案


double dx{(a-b)/c};很好。表达方式

(a-b)/c

double在分区的左侧和分区int的右侧具有类型。通过通常的算术转换,将 int右侧的 a 转换为 adouble以匹配左侧,然后进行除法。这意味着您实际上是在将 a 除以doublea double


推荐阅读