void va_start( std::va_list ap, parm_n );
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 parm_n is a pack expansion or an entity resulting from a lambda capture, the program is ill-formed, no diagnostic required.
(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.
[edit] Parameters ap - an object of the va_list type parm_n - the named parameter preceding the first variable parameter [edit] Expanded value(none)
[edit] Notesva_start
is required to support parm_n with overloaded operator&
.
#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:
[edit] Defect reportsThe 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 whetherva_start
is required to
operator&
required LWG 2099 C++98 the behavior was undefined if parm_n is
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4