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
相关产品推荐
相关产品推荐

