va_start
来自cppreference.com
| 在标头 <cstdarg> 定义
|
||
| (C++26 前) | ||
| (C++26 起) | ||
va_start 宏使函数能访问跟在具名实参 parmN 后的(C++26 前)可变参数。
应当在任何对 va_arg 的调用前,以合法的 std::va_list 对象 ap 调用 va_start。
如果 |
(C++26 前) | ||
|
如果 |
(C++26 起) |
参数
| ap | - | va_list 类型的对象 |
| parm_n | - | 首个可变参数之前的具名形参 |
展开值
(无)
注解
|
|
(C++26 前) |
示例
Run this code
#include <cstdarg>
#include <iostream>
int add_nums(int count...)
{
int result = 0;
std::va_list args;
va_start(args, count); // C++26 起能省略 count
for (int i = 0; i < count; ++i)
result += va_arg(args, int);
va_end(args);
return result;
}
int main()
{
std::cout << add_nums(4, 25, 25, 50, 50) << '\n';
}
输出:
150
缺陷报告
下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。
| 缺陷报告 | 应用于 | 出版时的行为 | 正确行为 |
|---|---|---|---|
| CWG 273 | C++98 | 不明确 va_start 是否需要支持重载了 operator& 的 parm_n
|
需要支持 |
| LWG 2099 | C++98 | 声明 parm_n 为函数,数组或引用类型时的行为未定义
|
parm_n 具有引用类型时的行为未定义
|
参阅
| 访问下一个可变函数实参 (宏函数) | |
| 结束对可变函数实参的遍历 (宏函数) | |
va_start 的 C 文档
|