Kla*_*aus 12 c++ type-conversion standard-library
下面的C++程序应该返回一个严格的正值.然而,它返回0.
怎么了 ?我怀疑是双重转换,但我无法弄清楚为什么以及如何.
#include <iostream>
#include <vector>
#include <numeric>
using namespace std;
int main()
{
vector<double> coordinates;
coordinates.push_back(0.5);
coordinates.push_back(0.5);
coordinates.push_back(0.5);
cout<<inner_product(coordinates.begin(), coordinates.end(), coordinates.begin(), 0)<<endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
GMa*_*ckG 14
因为你提供了一个初始值0,a int.您的代码在内部等效于:
int result = 0;
result = result + 0.5 * 0.5; // first iteration
result = result + 0.5 * 0.5; // second iteration
result = result + 0.5 * 0.5; // third iteration
return result;
Run Code Online (Sandbox Code Playgroud)
虽然result + 0.5 * 0.5生成了正确的值(在此表达式中result被提升double),但当该值被重新分配时result,它被截断(该表达式被强制转换为int).你永远不会超越1,所以你看0.
给它一个初始值0.0.