Agn*_*ian 2 c++ floating-point double warnings stl
这样做安全吗?
double darray[10];
vector<float> fvector;
fvector.insert(fvector.begin(), darray, darray + 10); // double to float conversion
// now work with fvector
Run Code Online (Sandbox Code Playgroud)
VS2008 给了我一个关于双浮点转换的警告。我如何摆脱这个警告?我认为darray转换float*为没有意义,因为这会改变指针的步长(步幅)。
更新:我知道警告表示什么。但与“afloat = adouble;”不同 在我可以轻松应用强制转换的情况下,在这种情况下我无法消除警告。
编辑:我已经编辑了代码,使其darray不再是函数参数。感谢所有指出这一点的人。
使用 std::transform() 这允许您提供转换方法。
那么你只需要一个不产生警告的转换方法:
#include <vector>
#include <algorithm>
#include <iterator>
struct CastToFloat
{
float operator()(double value) const { return static_cast<float>(value);}
};
int main()
{
double data[] = { 1, 2,3,4,5,6,7,8,9,10};
std::vector<float> fl;
std::transform(data, data+10,
std::back_inserter(fl),
CastToFloat());
}
Run Code Online (Sandbox Code Playgroud)