va_start
Определено в заголовке <cstdarg> |
||
|---|---|---|
void va_start( std::va_list ap, parm_n ); |
Макрос va_start позволяет получить доступ к аргументам переменной длины, следуя за именованным аргументом parm_n.
va_start необходимо вызвать с экземпляром корректного объекта va_list ap перед любыми вызовами va_arg.
|
Если |
(с C++11) |
Если parm_n объявлен с типом ссылки или типом, несовместимым с типом, полученным из стандартных преобразований аргументов, поведение не определено.
Параметры
| ap | - | экземпляр типа va_list |
| parm_n | - | именованный параметр, предшествующий первому параметру переменной длины |
Расширенное значение
(нет)
Примечания
va_start необходим для поддержки parm_n с перегруженными operator&.
Пример
#include <cstdarg>
#include <iostream>
int add_nums(int count...)
{
int result = 0;
std::va_list args;
va_start(args, 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++.
| DR | Применимо к | Поведение, опубликованное | Правильное поведение |
|---|---|---|---|
| CWG 273 | C++98 |
va_start может не работать, если унарный operator& перегружен
|
требуется работать корректно, даже если operator& перегружен |
См. также
| получает следующий аргумент переменной длины функции (функциональная макрос) |
|
| завершает прохождение по аргументам переменной длины функции (функциональная макрос) |
|
Документация на C для va_start |
|
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/utility/variadic/va_start