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:
-
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). -
Using variadic templates:
template<typename... Args> void process(Args... args);This is a safer and more modern approach available since C++11.
-
Passing parameters in a container (e.g.,
std::vectororstd::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) andstd::vectorallow passing collections of parameters but require explicit container creation at call time.std::initializer_listis often used in conjunction with constructors for object initialization. -
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.