va_start - cppreference.com
From cppreference.com
|
|
||
The va_start macro enables access to the variable arguments following the named argument parm_n.
va_start should be invoked with an instance to a valid va_list object ap before any calls to va_arg.
|
If the |
(since C++11) |
If parm_n is of reference type, or of a type not compatible with the type that results from default argument promotions, the behavior is undefined.
Parameters
| ap | - | an object of the va_list type |
| parm_n | - | the named parameter preceding the first variable parameter |
Expanded value
(none)
Notes
va_start is required to support parm_n with overloaded operator&.
Example
#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'; }
Output:
Defect reports
The following behavior-changing defect reports were applied retroactively to previously published C++ standards.
| DR | Applied to | Behavior as published | Correct behavior |
|---|---|---|---|
| CWG 273 | C++98 | it was unclear whether va_start is required tosupport parm_ns with overloaded operator&
|
required |
| LWG 2099 | C++98 | the behavior was undefined if parm_n isdeclared with a function, array, or reference type |
the behavior is undefined ifparm_n is of reference type
|