C++ 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

我正在尝试创建一个模板函数,该函数返回STL算法函数的结果,而没有任何“可能的数据丢失”警告

模板
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{});