Sobes.tech
Junior

Can a function in C++ accept a variable number of parameters?

sobes.tech AI

Answer from AI

Yes, it can. This is achieved in several ways:

  1. Using ellipsis (...) in function declaration:

    // Example of using ellipsis
    int sum(int count, ...);
    

    Access to these parameters is done using macros from <cstdarg> (e.g., va_start, va_arg, va_end).

  2. Using variadic templates:

    template<typename... Args>
    void process(Args... args);
    

    This is a safer and more modern approach available since C++11.

  3. Passing parameters in a container (e.g., std::vector or std::initializer_list):

    #include <vector>
    
    void process_vector(const std::vector<int>& params);
    
    #include <initializer_list>
    
    void process_list(std::initializer_list<int> params);
    

    Both std::initializer_list (since C++11) and std::vector allow passing collections of parameters but require explicit container creation at call time. std::initializer_list is often used in conjunction with constructors for object initialization.

  4. Using custom data structures: You can define a struct or class to package parameters.

Comparison:

Method Type safety Declaration Overhead C++ version required
... Low No Minimal C
Variadic templates High Yes Depends on implementation C++11
std::vector High Explicit Depends on vector size C++98
std::initializer_list High Explicit Depends on implementation C++11

In modern C++, variadic templates are the preferred method for type-safe functions with variable numbers of arguments. Ellipsis is inherited from C and is less type-safe.