Spec-Zone.ru › C++

va_start

Определено в заголовке <cstdarg>
void va_start( std::va_list ap, parm_n );

Макрос va_start позволяет получить доступ к аргументам переменной длины, следуя за именованным аргументом parm_n.

va_start необходимо вызвать с экземпляром корректного объекта va_list ap перед любыми вызовами va_arg.

Если parm_n является расширением пакета пакета параметров или сущностью, полученной из захвата лямбда-функции, программа является некорректной, диагностика не требуется.

(с 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& перегружен

См. также

va_arg
получает следующий аргумент переменной длины функции
(функциональная макрос)
va_end
завершает прохождение по аргументам переменной длины функции
(функциональная макрос)
Документация на 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API