You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++20实现接收可变参数包的sum函数(仅用+运算符)

C++20 实现可变参数包累加求和函数

要实现满足要求的sum函数,C++20的折叠表达式是最简洁且符合要求的方案——它直接对参数包展开使用+运算符,完全不会用到+=,完美适配题目限制。

最终实现代码

template <class... Args>
auto sum(Args... args)
{
    return (args + ...);
}

代码说明

这里用的是一元右折叠表达式,它会把参数包展开成嵌套的+运算结构:

  • 比如传入sum(a, b, c, d),会被展开为 a + (b + (c + d))
  • 所有运算都仅依赖+运算符,完全不涉及+=,符合题目对运算符的限制。

类型兼容性说明

因为题目保证所有参数类型都重载了对应的+运算符,所以不同类型混合传入时,C++会自动根据重载规则推导运算顺序和结果类型:

  • 比如sum(1, 2.5, 3)会按int + double + int的规则运算,最终返回double类型的6.5
  • 自定义类型只要正确重载了operator+,也能正常参与求和。

测试示例

#include <iostream>
#include <string>

template <class... Args>
auto sum(Args... args)
{
    return (args + ...);
}

int main() {
    // 整数求和
    std::cout << sum(1, 2, 3, 4) << '\n'; // 输出10
    // 混合数值类型求和
    std::cout << sum(1.2, 3, 5.8) << '\n'; // 输出10.0
    // 字符串拼接(本质也是+运算)
    std::cout << sum("Hello, ", "C++ ", "20!") << '\n'; // 输出Hello, C++ 20!
}

内容的提问来源于stack exchange,提问作者Amolgorithm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 00:42:05