📅  最后修改于: 2023-12-03 14:39:58.740000             🧑  作者: Mango
在C++中,省略号(...
)可以用作用于函数参数的特殊标记,表示可变参数列表。在定义函数时,使用省略号作为参数表示该函数接受可变数量的参数。
以下是使用省略号实现可变参数列表的基本语法格式:
#include <cstdarg>
int func(int arg1, ...)
{
va_list args;
va_start(args, arg1);
// 访问可变参数
int value = va_arg(args, int);
va_end(args);
return value;
}
以上代码使用了标准库头文件 <cstdarg>
中的几个函数:
va_list
:类型用来存储所有可变参数的信息。va_start
:宏函数指针参数,用于初始化可变参数列表。va_arg
:宏函数用于从参数列表中访问可变参数。va_end
:宏函数用于释放可变参数列表资源。在该示例中,函数 func
接收两个参数,并使用 va_list
定义了一个可变参数的列表,接着使用 va_start
初始化这个列表。在函数中,通过 va_arg
访问了其中的元素,并用 va_end
结束该列表。在实际开发中,可以根据需求自由使用这些函数。
下面的示例中,定义的函数 printCount
可以打印出传入参数的个数。红色的字体用于新学习的地方。
#include <iostream>
#include <cstdarg>
int printCount(int count, ...)
{
std::va_list list;
va_start(list, count);
std::cout << "The number of arguments is: " << count << '\n';
for (int arg = 0; arg < count; ++arg)
{
std::cout << " arg " << arg + 1 << ": " << va_arg(list, int) << '\n';
}
va_end(list);
}
int main()
{
printCount(3, 1, 2, 3);
return 0;
}
在该示例中,我们生成一组可变参数:1
,2
,3
。函数 printCount
经过改进,现在可以将其数量打印到控制台上,而我们只需使用一个 int
类型的参数 count
来传递这一信息。在下一步中,我们使用 for
循环遍历所有可变参数,并打印到控制台上。
该示例说明了可变参数的另一种使用方法。我们定义了一个名字为 sum
的函数,该函数可以对其传入的变量长度的整型数组进行求和操作。
#include <iostream>
#include <cstdarg>
// 按可变参数求和
int sum(const int count, ...)
{
va_list args;
va_start(args, count);
int total = 0;
for (int i = 0; i < count; ++i)
{
total += va_arg(args, int);
}
va_end(args);
return total;
}
int main()
{
std::cout << sum(3, 1, 2, 3) << '\n'; // 输出 "6"
std::cout << sum(5, 1, 2, 3, 4, 5) << '\n'; // 输出 "15"
return 0;
}
从上图我们可以看到,函数 sum
的参数列表使用 ...
代表接收若干个整型参数。接下来,我们开始对参数进行求和操作。在 main()
函数中,我们调用了这个 sum
函数,分别传递不同的参数集并将结果输出到控制台上。当我们运行程序后,我们将看到:sum(3, 1, 2, 3)
应为 6
,sum(5, 1, 2, 3, 4, 5)
应为 15
。