std::vector<float> 和 double* - 这有多安全?

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不再是函数参数。感谢所有指出这一点的人。

Mar*_*ork 5

使用 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)