C++可变参数函数调用
时间: 2023-07-11 16:53:21 浏览: 98
C++可变参数的实现方法
C++可变参数函数调用可以使用C++11中引入的可变参数模板实现。具体实现方式如下:
1. 定义一个模板函数,函数模板参数包含一个参数包。
2. 在函数体中使用递归展开参数包,以实现对可变参数的遍历操作。
下面是一个简单的例子,实现可变参数函数的调用:
```c++
#include <iostream>
#include <cstdio>
#include <cstdarg>
using namespace std;
void my_printf(const char* fmt, ...) {
va_list args;
va_start(args, fmt);
while (*fmt) {
if (*fmt == '%') {
fmt++;
switch (*fmt) {
case 'd': {
int val = va_arg(args, int);
cout << val << endl;
break;
}
case 's': {
char* val = va_arg(args, char*);
cout << val << endl;
break;
}
default:
break;
}
} else {
cout << *fmt << endl;
}
fmt++;
}
va_end(args);
}
int main() {
my_printf("Hello %s!\n", "world");
my_printf("The value of pi is %d.\n", 3);
return 0;
}
```
在上面的例子中,我们定义了一个`my_printf`函数,该函数的第一个参数是一个`const char*`类型的字符串,用于格式化输出,后面的参数是一个可变参数列表,可以是任意类型的值。在函数体中,我们使用了`va_list`、`va_start`和`va_arg`等函数来遍历参数列表,并根据参数类型来输出不同的结果。
需要注意的是,在使用可变参数的时候,应该尽量避免类型转换和参数类型不一致的问题,以保证程序的正确性和可读性。
阅读全文