📅  最后修改于: 2023-12-03 15:14:04.182000             🧑  作者: Mango
C++11引入了可变关键字(variadic keyword),使得函数可以接受任意数量的参数。这种函数又被称为可变参数函数(variadic function)。
可变关键字的语法使用了省略号(...),用于指示参数数量不定。可变参数函数的最后一个明确指定的参数后面跟着省略号,表示接受任意数量的参数。当调用可变参数函数时,在最后一个明确指定的参数后面,用逗号分隔所有额外的参数。
举个例子,下面是一个简单的可变参数函数:
#include <iostream>
#include <stdarg.h>
int sum(int count, ...) {
va_list args;
va_start(args, count);
int result = 0;
for (int i = 0; i < count; i++) {
result += va_arg(args, int);
}
va_end(args);
return result;
}
int main() {
std::cout << sum(3, 1, 2, 3) << std::endl;
}
这个函数接受一个整数 count
和任意数量的整数参数。在函数内部,我们使用了 <stdarg.h>
头文件中的 va_list
、va_start
、va_arg
和 va_end
函数处理可变数量的参数。
可变参数函数在很多地方都可以用到,例如:printf、scanf、fopen 等。
下面我们写一个例子,用可变参数函数来实现一个简易的 printf
函数:
#include <iostream>
#include <stdarg.h>
void my_printf(const char* format, ...) {
va_list args;
va_start(args, format);
char ch;
while (*format) {
if (*format == '%') {
format++;
switch (*format) {
case 'd': {
int num = va_arg(args, int);
std::cout << num;
break;
}
case 's': {
char* str = va_arg(args, char*);
std::cout << str;
break;
}
default:
break;
}
} else {
std::cout << *format;
}
format++;
}
va_end(args);
}
int main() {
my_printf("Hello, world!\n");
int a = 1, b = 2, c = 3;
my_printf("a + b + c = %d\n", a + b + c);
char str[] = "World";
my_printf("Hello, %s\n", str);
return 0;
}
我们在函数中使用了 va_arg
函数来从可变参数列表获取指定类型的参数,并进行相应的处理。
使用可变参数函数需要注意以下几点:
va_arg
获取参数之前,要调用 va_start
函数进行初始化,以防内存错误。va_end
函数清理资源。可变关键字是 C++ 中实用而强大的特性之一,允许我们编写更加灵活的函数。掌握可变参数函数的用法和注意事项,可以为我们开发更高效、更易用的代码提供帮助。