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

C++如何实现接收任意数量同类型参数的函数,无需额外传参?

可变参数求和函数实现方案

完全支持你要求的无额外参数、无额外大括号的调用形式,且具备编译期类型安全,不会出现C风格可变参数的容错问题。


适用C++11及以上版本的递归实现

兼容性最佳,无需依赖高版本C++特性:

// 递归终止条件:参数包为空时返回0
int total_sum() {
    return 0;
}

// 递归展开参数包
template<typename... Rest>
int total_sum(int first, Rest... rest) {
    return first + total_sum(rest...);
}

该实现会自动限定所有传入参数必须可隐式转换为int,若传入不兼容类型会直接编译报错,完全避免C风格可变参数的运行时错误。


适用C++17及以上版本的折叠表达式实现

写法最简洁,编译后效率和手写累加代码完全一致:

#include <type_traits>

template<typename... Args, typename = std::enable_if_t<std::conjunction_v<std::is_same<int, Args>...>>>
int total_sum(Args... args) {
    // 二元左折叠:从0开始累加所有参数
    return (0 + ... + args);
}

该实现通过std::conjunction_v严格限定所有传入参数必须是int类型,类型安全性更高,折叠表达式会在编译期直接展开为等价的累加代码,无任何运行时开销。


两种实现都完全支持你期望的调用形式:

total_sum(1, 2, 5, 4, 2); // 返回14
total_sum(5, 6, 2); // 返回13

内容的提问来源于stack exchange,提问作者justANewb stands with Ukraine

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 14:54:08