我正在尝试创建一个模板函数,它返回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 'return':从'_Ty‘转换为'T',可能丢失数据警告C4244 '=':从’_Ty‘转换为'_Ty',可能丢失数据
我也尝试了静态类型转换,但仍然得到第二个警告('float‘to '_Ty')。
template<typename T>
T sum(vector<T> A) {
return static_cast<T>(accumulate(A.begin(), A.end(), 0));
}
有没有办法消除这种类型的警告?
发布于 2020-10-29 10:53:33
您有一个由浮点数组成的向量,因此所需的accumulate
返回类型也应为float
。现在它是int
,因为这样的类型是根据accumulate
的第三个传递参数推导出来的- 0
数值文本的类型是int
。
要解决此问题,您应该将向量的value_type
作为float
传递,并由T{}
将其默认初始化(设为零
accumulate(A.begin(), A.end(), T{});
https://stackoverflow.com/questions/64589490
复制