Namespaces
Variants

va_start

From cppreference.net
Utilities library
ヘッダーで定義 <cstdarg>
void va_start ( std :: va_list ap, parm_n ) ;

va_start マクロは、名前付き引数 parm_n に続く可変個引数へのアクセスを可能にします。

va_start は、有効な va_list オブジェクト ap に対して、 va_arg の呼び出し前に実行する必要があります。

parm_n パック展開 または ラムダキャプチャ から生じたエンティティである場合、プログラムは不適格(診断不要)である。

(C++11以降)

parm_n が参照型である場合、または デフォルト引数プロモーション によって得られる型と互換性のない型である場合、動作は未定義です。

目次

翻訳の説明: - 「Contents」を「目次」に翻訳しました - C++関連の用語(Parameters, Expanded value, Notes, Example, Defect reports, See also)は原文のまま保持しました - HTMLタグ、属性、クラス名、IDなどは一切変更していません - 数値やリンク先もそのまま保持しています - 技術文書としての正確性と専門性を維持しています

パラメータ

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 が参照型の場合、動作は未定義

関連項目

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