#include <iostream>
#include <initializer_list>
// 计算一组整数的和
int sum(std::initializer_list<int> numbers) {
int total = 0;
for (int num : numbers) {
total += num;
}
return total;
}
int main() {
// 调用函数并传递可变数量的整数
int result = sum({1, 2, 3, 4, 5});
std::cout << "Sum: " << result << std::endl;
return 0;
}
代码解释:
std::initializer_list<int> 表示接受一个由 int 类型元素组成的列表。
在函数内部,通过范围 for 循环遍历这个列表并累加元素的值。
2. 使用可变参数模板
适用场景:可以处理不同类型的参数,并且参数数量可以在运行时确定。
示例代码:
#include <iostream>
// 递归终止函数
template<typename T>
T sum(T value) {
return value;
}
// 可变参数模板函数
template<typename T, typename... Args>
T sum(T first, Args... args) {
return first + sum(args...);
}
int main() {
int result = sum(1, 2, 3, 4, 5);
std::cout << "Sum: " << result << std::endl;
return 0;
}
def sum_numbers(*args):
total = 0
for num in args:
total += num
return total
# 调用函数并传递可变数量的参数
result = sum_numbers(1, 2, 3, 4, 5)
print(f"Sum: {result}")
2. 使用 **kwargs 传递任意数量的关键字参数
def print_info(**kwargs):
for key, value in kwargs.items():
print(f"{key}: {value}")
# 调用函数并传递可变数量的关键字参数
print_info(name="Alice", age=25, city="New York")
3. 同时使用 *args 和 **kwargs
def func(*args, **kwargs):
print("Positional arguments:")
for arg in args:
print(arg)
print("Keyword arguments:")
for key, value in kwargs.items():
print(f"{key}: {value}")
func(1, 2, 3, name="Bob", age=30)
代码解释:
第一个 sum 函数是递归终止函数,当参数列表中只剩下一个元素时调用。
第二个 sum 函数是可变参数模板函数,它接受一个参数 first 和一个可变参数包 args,然后递归调用 sum 函数处理剩余的参数。