
As funções variádicas (ou funções de número variável de argumentos) em C++ são funções que podem receber um número indeterminado de argumentos.
Isso é útil quando o número de argumentos que a função precisa processar não é conhecido antecipadamente.
Em C++, as funções variádicas são implementadas usando a sintaxe de elipse (...) e macros da biblioteca <cstdarg>.
Para declarar uma função variádica, você especifica pelo menos um parâmetro fixo e, em seguida, usa ... para indicar que a função pode aceitar argumentos adicionais. Aqui está um exemplo simples:
#include <iostream>
#include <cstdarg>
void printNumbers(int count, ...) {
    va_list args;
    va_start(args, count);
    
    for (int i = 0; i < count; ++i) {
        int num = va_arg(args, int);
        std::cout << num << " ";
    }
    
    va_end(args);
    std::cout << std::endl;
}
int main() {
    printNumbers(3, 10, 20, 30);
    printNumbers(5, 1, 2, 3, 4, 5);
    
    return 0;
}#include <iostream>: Inclui a biblioteca padrão de entrada e saída.#include <cstdarg>: Inclui a biblioteca necessária para trabalhar com argumentos variádicos.printNumbers:
    void printNumbers(int count, ...): Declara uma função que aceita um número variável de argumentos. O primeiro argumento count é fixo e indica quantos argumentos adicionais serão passados para a função.va_list args;: Declara uma variável args do tipo va_list, que será usada para acessar os argumentos variádicos.va_start(args, count);: Inicializa args para acessar os argumentos após count.int num = va_arg(args, int);: Obtém o próximo argumento da lista args, especificando seu tipo (int neste caso).va_end(args);: Limpa args após todos os argumentos terem sido processados.printNumbers(3, 10, 20, 30);: Chama a função com 3 como o número de argumentos adicionais, seguido pelos valores 10, 20 e 30.printNumbers(5, 1, 2, 3, 4, 5);: Chama a função com 5 como o número de argumentos adicionais, seguido pelos valores 1, 2, 3, 4 e 5.
count no exemplo) para indicar quantos argumentos variádicos estão sendo passados.Com a introdução do C++11, uma alternativa mais segura e flexível às funções variádicas tradicionais é o uso de templates variádicos e std::initializer_list. Aqui está um exemplo usando templates variádicos:
#include <iostream>
template<typename T>
void print(T value) {
    std::cout << value << " ";
}
template<typename T, typename... Args>
void print(T first, Args... args) {
    print(first);
    print(args...);
}
int main() {
    print(10, 20, 30);
    print(1, 2, 3, 4, 5);
    
    return 0;
}Funções variádicas em C++ são uma poderosa ferramenta para criar funções que podem lidar com um número variável de argumentos. No entanto, é importante usá-las com cuidado devido à falta de verificação de tipos e outros potenciais problemas de segurança. Com o C++11 e posterior, templates variádicos oferecem uma alternativa mais segura e flexível.