次の方法で共有


省略記号と既定の引数

関数が関数定義で指定されているよりも少ない数の引数を受け取るには、省略記号 (...) を使用するか、既定の引数を使用します。

省略記号は、引数が必要だが、宣言で数と型を指定しないことを示します。 この方法は、C++ の利点の 1 つであるタイプ セーフが活用できないため、C++ のプログラミングとしてお勧めできません。 省略記号を使用して宣言された関数と、正式な実引数の型が指定された関数とでは適用される変換方式が異なります。

  • 実引数が float 型の場合、関数呼び出しの前に、引数が double 型に昇格します。

  • 符号付きまたは符号なしの char、short、列挙型、またはビット フィールドは、整数の上位変換を使用して、符号付きまたは符号なしの int に変換されます。

  • クラス型のすべての引数は、データ構造体として値渡しされます。またクラスのコピー コンストラクター (存在する場合) を起動するのではなく、バイナリのコピーによってコピーが作成されます。

省略記号を使用する場合、省略記号は引数リストの最後に宣言する必要があります。 可変個の引数を渡す方法の詳細については、「ランタイム ライブラリ リファレンス」の va_arg、va_start、および va_list の説明を参照してください。

CLR プログラミングの既定の引数については、「可変個引数リスト (...) (C++/CLI)」を参照してください。

既定の引数では、関数呼び出しで引数を指定しない場合に、自動的に使用される引数の値を指定できます。 次のコード片では、既定の引数がどのように機能するかを示します。 既定の引数を指定する際の制限の詳細については、「Default Arguments (既定の引数)」を参照してください。

// expre_Ellipses_and_Default_Arguments.cpp
// compile with: /EHsc
#include <iostream>

// Declare the function print that prints a string,
// then a terminator.
void print( const char *string,
            const char *terminator = "\n" );

int main()
{
    print( "hello," );
    print( "world!" );

    print( "good morning", ", " );
    print( "sunshine." );
}

using namespace std;
// Define print.
void print( const char *string, const char *terminator )
{
    if( string != NULL )
        cout << string;

    if( terminator != NULL )
        cout << terminator;
}

上のプログラムでは 2 個の引数を受け取る関数、print を宣言します。 ただし、2 番目の引数、terminator には既定値、"\n" があります。 main では、print を最初の 2 回呼び出すと、既定の 2 番目の引数によって、改行して印刷文字列が出力されます。 3 番目の呼び出しでは、2 番目の引数の明示的な値が指定されます。 このプログラムによる出力は次のとおりです。

hello,
world!
good morning, sunshine.

参照

関連項目

省略記号 (...)