gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 07:15:30 27 4
gpt4 key购买 nike

我正在尝试创建一个模板函数,该函数返回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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com