Default Arguments in C++

1789 ワード

既定のパラメータを持つ関数
一般に,関数呼び出し時にパラメータが実パラメータから値を取得するため,実パラメータの個数はパラメータと同じである.同じ関数を複数回呼び出すときに同じ実パラメータを使用する場合があります.C++は簡単な処理方法を提供し、パラメータにデフォルト値を与えます.これにより、パラメータは必ずしも実パラメータから値を取る必要はありません.関数宣言がある場合:
float area(float r = 6.5);

rのデフォルト値を6.5とし、この関数を呼び出すときにrの値が6.5であることを確認すると、実パラメータの値を与える必要はありません.
area(); //    area(6.5);

このデフォルト値を取得したくない場合は、実パラメータで別途指定します.のように
area(7.9); //     7.9,   6.5

この方法は比較的柔軟で、プログラミングを簡素化し、効率を高めることができます.
複数の実パラメータがある場合は、各パラメータにデフォルト値を1つ指定するか、一部のパラメータにのみデフォルト値を指定し、もう一部のパラメータにはデフォルト値がわかりません.次のようになります.
float volume(float h, float r = 12.5); //     r     12.5

この場合、関数呼び出しは次の形式で実行できます.
volume(45.6); //    volume(45.6, 12.5);
volume(34.2, 10.4);  //h    34.2, r   10.4

実参と形参の結合は左から右の順序で行われ、最初の実参は必然的に最初の形参と結合する...したがって、デフォルト値を指定するパラメータは、パラメータリストの右端に配置する必要があります.そうしないと、エラーが発生します.例:
void f1(float a, int b = 0, int c, char d = 'a'); //Wrong
void f2(float a, int c, int b = 0, char d = 'a'); // Right

上のf 2関数を呼び出すと、次の形式になります.
f2(3.5, 5, 3, 'x'); //        
f2(3.5, 5, 3); //          
f2(3.5, 5); //           

なお、実参加パラメータの結合は左から右の順序で行われるため、f 2を呼び出すときに3番目のパラメータをデフォルトではなく、4番目のパラメータを同時に書くことはできません.システムは、3番目のパラメータを書いたと思っていますが、4番目のパラメータはデフォルト値を使用します.注:(1)関数の定義が関数呼び出しの前にある場合は、関数定義にデフォルト値を指定します.関数定義が関数呼び出しの後にある場合、関数呼び出しの前に関数宣言が必要になります.この場合、関数宣言にデフォルト値を指定する必要があります.関数定義時にデフォルト値を指定しなくてもいいです.関数を宣言するときにパラメータにデフォルト値が与えられ、定義時にパラメータにデフォルト値が与えられた場合、コンパイルシステムによっては「デフォルト値の繰り返し指定」とエラーが表示されます.混同を避けるには、関数宣言時にのみデフォルト値を指定することが望ましい.(2)1つの関数をリロード関数としてもデフォルトパラメータのある関数としても使用できない.関数を呼び出すときにパラメータを1つ少なく書くと、リロード関数を利用するかデフォルトパラメータを利用する関数を利用するか判断できず、二義性が現れるからです.