Namespaces
Variants

va_start

ja.cppreference.net より
 
 
ユーティリティライブラリ
言語サポート
型サポート (基本型、RTTI)
ライブラリ機能テストマクロ (C++20)
プログラムユーティリティ
可変個引数関数
コルーチンサポート (C++20)
契約サポート (C++26)
三方比較
(C++20)
(C++20)(C++20)(C++20)    
(C++20)(C++20)(C++20)

汎用ユーティリティ
関係演算子 (C++20で非推奨)
整数比較関数
(C++20)(C++20)(C++20)    
(C++20)
swap と 型操作
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
共通の語彙型
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)



 
 
ヘッダ <cstdarg>
void va_start( std::va_list ap, parmN );
で定義 (C++26まで)
void va_start( std::va_list ap, ... );
(C++26以降)

マクロ va_start は、名前付き引数 に続く可変個引数へのアクセスを可能にします (C++26まで)parmN(C++26以降)。

va_start は、va_arg の呼び出しより前に、有効な apstd::va_list オブジェクトのインスタンスを指定して呼び出されなければなりません (C++26まで)(C++26以降)

。 parm_n が パック展開 または ラムダキャプチャ に起因するエンティティである場合、プログラムは ill-formed であり、診断は不要です。

(C++11以降)

もし parm_n が参照型である場合、または デフォルト引数昇格 の結果となる型と互換性のない型である場合、動作は未定義です。

(C++26まで)

もし va_start に複数の引数が存在する場合、2番目以降の引数を構成する前処理トークンは破棄されます。それらの引数のいずれかが、括弧のバランスが取れていない式に展開される場合、またはトークンに変換されない前処理トークンが含まれる場合、プログラムは ill-formed であり、診断は不要です。

(C++26以降)

パラメータ

ap - va_list 型のオブジェクト
parm_n - 最初の可変引数に先行する名前付きパラメータ

展開された値

(なし)

注記

va_start は、オーバーロードされた operator& を持つ parm_n をサポートするために必要です。

例

#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';
}

出力:

150

不具合報告

以下の動作変更の欠陥報告書は、以前に公開されたC++規格に対して遡及的に適用されました。

DR 適用対象 公開時の動作 正しい動作
CWG 273 C++98 va_startがオーバーロードされた operator&を持つ parm_n をサポートする必要があるかどうかが不明確 必須
LWG 2099 C++98 parm_n が関数型、配列型、または参照型で宣言されている場合、動作は未定義 parm_n が参照型の場合、動作は未定義

関連項目

可変個引数関数の次の引数にアクセスする
(関数マクロ)
可変個引数関数の引数の走査を終了する
(関数マクロ)