在表达式中应用了什么转换(double to int)

时间:2017-01-26 19:41:48

标签: c++ implicit-conversion

有一个表达式(作为中位数计算的一部分):

auto iter1 = std::next(first, floor(size/2) - 1 );
double result  = *iter1 + *(iter1 + 1)) / 2;

其中迭代器下的值类型为int。

预期结果,例如:

  

1.5 =(1 + 2)/ 2

但是,如果值为1和2,则结果为1,看起来像是隐式转换为int

请解释,这里适用的规则(或我的误解?)

1 个答案:

答案 0 :(得分:4)

在您的第二个表达式double result = *iter1 + *(iter1 + 1)) / 2;中:根据运算符优先级,首先对*(iter1 + 1)) / 2进行评估;由于/运算符的操作数都是整数,因此子表达式将导致integer division。然后将整数除法的结果添加到*iter1

  

有一个表达式(作为中位数计算的一部分):

double result  = *iter1 + *(iter1 + 1)) / 2;

由于右侧表达式的常见类型是int。没有conversion完成。拥有至少一个double将解决您的问题。 (另请注意我添加的括号以适合您的示例)。

double result  = (*iter1 + static_cast<double>(*(iter1 + 1))) / 2.0;