c++ - STL算法返回类型强制转换,不会造成数据丢失

标签 c++ stl type-conversion

我正在尝试创建一个模板函数,该函数返回STL算法函数的结果而没有任何“可能的数据丢失”警告。

template<typename T>
T sum(vector<T> A) {
     return accumulate(A.begin(), A.end(), 0);
}

int main() {
    vector<float> A;
    sum(A);

    return 0;
}
但这给了我:
警告C4244“返回”:从“_Ty”到“T”的转换,可能丢失数据
警告C4244'=':从'float'到'_Ty'的转换,可能丢失数据
我也尝试了静态强制转换,但仍然收到第二个警告(“ float ”到“_Ty”)。
 template<typename T>
 T sum(vector<T> A) {
      return static_cast<T>(accumulate(A.begin(), A.end(), 0));
 }
有办法消除这种警告吗?

最佳答案

您有一个float的 vector ,因此所需的accumulate返回类型也应为float。现在它是int,因为这种类型是根据accumulate的第三个传递参数推导出的-0的数字文字类型是int
要解决此问题,您应通过value_type将 vector 的float作为T{}传递,并使用默认初始化(为零):

accumulate(A.begin(), A.end(), T{});

关于c++ - STL算法返回类型强制转换,不会造成数据丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64589490/

相关文章:

c++ - GLSL/OpenGL 着色器曲面 segmentation 闪烁和失败

c++ - C++ 中的成员函数作为 Friend 函数

c++ - 使用std::filesystem, error shows cannot convert int to _Valty

php - (size_t)(uint32_t)-(int32_t)(nTableMask) 是什么意思

c++ - 计算范围内的数字算法 (C++)

c++ - Boost序列化版本信息

c++ - 如何使用自定义比较器对数组进行排序?

c++ - 在 C++ STL 中访问双端队列元素的最佳方法是什么

c++ - 为什么一个表达式中的 std::string 连接给出的结果与 char by char 的结果不同?

java - 帮助将字节的字符串数组类型转换为实际字节