首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >STL算法返回类型转换而不会丢失数据

STL算法返回类型转换而不会丢失数据
EN

Stack Overflow用户
提问于 2020-10-29 18:43:08
回答 1查看 37关注 0票数 1

我正在尝试创建一个模板函数,它返回STL算法函数的结果,而不会出现任何“可能的数据丢失”警告。

代码语言:javascript
代码运行次数:0
运行
复制
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')。

代码语言:javascript
代码运行次数:0
运行
复制
 template<typename T>
 T sum(vector<T> A) {
      return static_cast<T>(accumulate(A.begin(), A.end(), 0));
 }

有没有办法消除这种类型的警告?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-29 18:53:33

您有一个由浮点数组成的向量,因此所需的accumulate返回类型也应为float。现在它是int,因为这样的类型是根据accumulate的第三个传递参数推导出来的- 0数值文本的类型是int

要解决此问题,您应该将向量的value_type作为float传递,并由T{}将其默认初始化(设为零

代码语言:javascript
代码运行次数:0
运行
复制
accumulate(A.begin(), A.end(), T{});
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64589490

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档