📅  最后修改于: 2023-12-03 15:27:17.121000             🧑  作者: Mango
在 C++ 中,省略号( ...
)被称为可变参数列表,它允许函数接受任意数量的参数。本文将介绍省略号的一些用法、注意事项及示例代码。
void function_name(type1 arg1, type2 arg2, ...);
在函数声明中,省略号出现在参数列表的末尾。省略号前的参数是固定数量的,而省略号后的参数是可变数量的。
#include <cstdarg>
void my_printf(const char* fmt, ...)
{
va_list args;
va_start(args, fmt);
// 访问可变参数列表
// ...
va_end(args);
}
在可变参数列表中,参数的类型和数量都是未知的。为了访问这些参数,需要使用头文件 <cstdarg>
提供的宏。
va_list
: 可变参数列表va_start
: 初始化可变参数列表va_arg
: 获取可变参数列表中的下一个参数va_end
: 结束可变参数列表下面是一个使用可变参数列表实现的打印函数 my_printf
的示例:
#include <iostream>
#include <cstdarg>
using namespace std;
void my_printf(const char* fmt, ...)
{
va_list args;
va_start(args, fmt);
while (*fmt != '\0') {
if (*fmt == '%') {
fmt++;
switch (*fmt) {
case 'd':
cout << va_arg(args, int);
break;
case 'f':
cout << va_arg(args, double);
break;
case 'c':
cout << va_arg(args, char);
break;
case 's':
cout << va_arg(args, char*);
break;
default:
break;
}
} else {
cout << *fmt;
}
fmt++;
}
va_end(args);
}
int main()
{
my_printf("Hello, %s! %d + %d = %d. %c\n", "world", 1, 2, 3, 'A');
my_printf("PI = %f, e = %f\n", 3.1415926, 2.7182818);
return 0;
}
该代码可以输出:
Hello, world! 1 + 2 = 3. A
PI = 3.142, e = 2.718
其中, %d
表示输出一个整数, %f
表示输出一个浮点数, %c
表示输出一个字符, %s
表示输出一个字符串。注意,在 switch
语句中必须处理所有的格式化字符,否则将会导致未定义行为。
...
)。register
存储类别。可变参数列表为 C++ 中的函数调用带来了灵活性和可扩展性。通过合理利用函数的可变参数列表,我们可以更加轻松而灵活地处理参数。但是,在使用可变参数列表时,一定要小心,以免造成程序的崩溃、死循环、运行期错误等问题。