STL 算法 return 类型转换而不会丢失数据
STL algorithms return type cast without possible data loss
我正在尝试创建一个模板函数,该函数 returns 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“=”:从 'float' 转换为“_Ty”,可能丢失数据
我也尝试了静态转换,但我仍然收到第二个警告('float' 到“_Ty”)。
template<typename T>
T sum(vector<T> A) {
return static_cast<T>(accumulate(A.begin(), A.end(), 0));
}
有没有办法消除此类警告?
您有一个浮点向量,因此所需的 return 类型的 accumulate
也应该是 float
。现在是 int
,因为这种类型是根据 accumulate
的第三个传递参数推导出来的 - 0
数字文字的类型是 int
.
要解决此问题,您应该将向量的 value_type
作为 float
传递,并通过 T{}
:
默认初始化(为零)
accumulate(A.begin(), A.end(), T{});
我正在尝试创建一个模板函数,该函数 returns 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“=”:从 'float' 转换为“_Ty”,可能丢失数据
我也尝试了静态转换,但我仍然收到第二个警告('float' 到“_Ty”)。
template<typename T>
T sum(vector<T> A) {
return static_cast<T>(accumulate(A.begin(), A.end(), 0));
}
有没有办法消除此类警告?
您有一个浮点向量,因此所需的 return 类型的 accumulate
也应该是 float
。现在是 int
,因为这种类型是根据 accumulate
的第三个传递参数推导出来的 - 0
数字文字的类型是 int
.
要解决此问题,您应该将向量的 value_type
作为 float
传递,并通过 T{}
:
accumulate(A.begin(), A.end(), T{});