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