- cstdarg[meta header]
- macro[meta id-type]
- cpp11[meta cpp]
#define va_copy(dest, src) unspecified- unspecified[italic]
va_listオブジェクトsrcの現在の状態を、destに複製する。
複製したdestは、srcと同じ位置から独立してva_argで引数をたどれる。
destを、va_startでsrcを初期化してからsrcに対して行われたのと同じ回数のva_arg呼び出しを適用した状態に初期化する。
なし
va_copyで初期化したdestも、使用後は対応するva_endで後始末しなければならない。
#include <cstdarg>
#include <iostream>
// 可変引数を2回走査する(合計と、複製した情報を使った最大値)
void print_sum_and_max(int count, ...)
{
std::va_list args;
va_start(args, count);
// argsを複製して独立に走査する
std::va_list args_copy;
va_copy(args_copy, args);
int total = 0;
for (int i = 0; i < count; ++i) {
total += va_arg(args, int);
}
va_end(args);
int max = va_arg(args_copy, int);
for (int i = 1; i < count; ++i) {
int v = va_arg(args_copy, int);
if (v > max) max = v;
}
va_end(args_copy);
std::cout << "sum=" << total << ", max=" << max << std::endl;
}
int main()
{
print_sum_and_max(3, 10, 30, 20);
}- va_copy[color ff0000]
- std::va_list[link va_list.md]
- va_start[link va_start.md]
- va_arg[link va_arg.md]
- va_end[link va_end.md]
sum=60, max=30
- C++11