名前空間
変種
操作

va_start

From cppreference.com
< cpp‎ | utility‎ | variadic
 
 
ユーティリティライブラリ
言語サポート
型のサポート (基本型、RTTI)
ライブラリ機能検査マクロ (C++20)
プログラムユーティリティ
可変引数関数
コルーチンサポート (C++20)
契約サポート (C++26)
三方比較
(C++20)
(C++20)(C++20)(C++20)  
(C++20)(C++20)(C++20)

汎用ユーティリティ
関係演算子 (C++20で非推奨)
 
 
ヘッダー <cstdarg> で定義
void va_start( std::va_list ap, parm_n );

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

va_start は、va_arg の呼び出しの前に、有効な va_list オブジェクト ap のインスタンスで呼び出す必要があります。

parm_nパック展開 または ラムダキャプチャ の結果であるエンティティである場合、プログラムは不適格 (ill-formed) ですが、診断は要求されません。

(C++11以降)

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

目次

[編集] パラメータ

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 が参照型の場合

[編集] 関連項目

次の可変長引数にアクセスする
(関数マクロ) [編集]
可変長引数の走査を終了する
(関数マクロ) [編集]
English 日本語 中文(简体) 中文(繁體)