Пространства имён
Варианты
Действия

va_start

Материал из cppreference.com
< cpp‎ | utility‎ | variadic
 
 
Библиотека утилит
Языковая поддержка
Поддержка типов (базовые типы, RTTI)
Макросы тестирования функциональности библиотеки (C++20)    
Управление динамической памятью
Программные утилиты
Поддержка сопрограмм (C++20)
Вариативные функции
Трёхстороннее сравнение (C++20)
(C++20)
(C++20)(C++20)(C++20)(C++20)(C++20)(C++20)
Общие утилиты
Дата и время
Функциональные объекты
Библиотека форматирования (C++20)
(C++11)
Операторы отношения (устарело в C++20)
Целочисленные функции сравнения
(C++20)(C++20)(C++20)    
(C++20)
Операции обмена и типа
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
Общие лексические типы
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)
Элементарные преобразования строк
(C++17)
(C++17)
 
 
Определено в заголовочном файле <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 <iostream>
#include <cstdarg>
 
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

[править] Смотрите также

обращается к следующему аргументу функции с переменным числом аргументов
(функция-макрос) [править]
завершает обход аргументов функции с переменным числом аргументов
(функция-макрос) [править]