#define va_copy(dest, src) unspecified
概要
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);
}
出力
sum=60, max=30
バージョン
言語
- C++11