C++ STL算法返回类型转换而不丢失数据
我正在尝试创建一个模板函数,该函数返回STL算法函数的结果,而没有任何“可能的数据丢失”警告C++ STL算法返回类型转换而不丢失数据,c++,stl,type-conversion,C++,Stl,Type Conversion,我正在尝试创建一个模板函数,该函数返回STL算法函数的结果,而没有任何“可能的数据丢失”警告 模板 T和(向量A){ 返回累加(A.begin(),A.end(),0); } int main(){ 载体A; 总额(A); 返回0; } 但这给了我: 警告C4244“返回”:从“Y”转换为“T”,可能会丢失数据 警告C4244'=':从“浮点”转换为“_Ty”,可能会丢失数据 我也尝试了静态强制转换,但仍然得到第二个警告(“float”到“_Ty”) 模板 T和(向量A){ 返回静态_cast
模板
T和(向量A){
返回累加(A.begin(),A.end(),0);
}
int main(){
载体A;
总额(A);
返回0;
}
但这给了我:
警告C4244“返回”:从“Y”转换为“T”,可能会丢失数据
警告C4244'=':从“浮点”转换为“_Ty”,可能会丢失数据
我也尝试了静态强制转换,但仍然得到第二个警告(“float”到“_Ty”)
模板
T和(向量A){
返回静态_cast(累加(A.begin(),A.end(),0));
}
有没有办法消除这种类型的警告?您有一个浮点向量,因此所需的
累计
返回类型也应该是浮点
。现在它是int
,因为这种类型是根据acculate
的第三个传递参数推导出来的,0
数值文本的类型是int
要解决此问题,应通过T{}
将向量的value\u type
传递为float
,默认初始化为零:
accumulate(A.begin(), A.end(), T{});
累加(A.begin(),A.end(),T{})代码>T{}不是默认的初始化。这是价值初始化。
template<typename T>
T sum(vector<T> A) {
return static_cast<T>(accumulate(A.begin(), A.end(), 0));
}
accumulate(A.begin(), A.end(), T{});