最良の一致が決定される順序は次のとおりです。 精度の一致 標準変換 ユーザー定義の変換 デフォルトの引数の最小数
C での最良の一致関数のオーバーロードはどのようにして決定されましたか?
C では、関数のオーバーロードを使用して、名前は同じでパラメーターが異なる関数の複数のバージョンを作成できます。コンパイラは、適切なオーバーロードされたバージョンを使用するときに、一連のルールに従って最適な一致を決定します。
ルール:
-
精度一致: このルールは、実際の参加者番号が正式な参加者番号のタイプと正確に一致する場合に適用されます。
-
標準変換: このルールは、実際の参加者番号を暗黙的に正式な参加者番号に変換できる場合に適用されます。
-
ユーザー定義の変換: このルールは、ユーザー定義の変換演算子があり、実際の参加者を正式な参加者に変換できる場合に適用されます。
-
デフォルト パラメーター: デフォルト パラメーターを持つオーバーロードされたバージョンは、デフォルト パラメーターがないバージョンよりも優先順位が低くなります。
最適な一致が決定される順序:
- 最初に、コンパイラは精度の一致を試みます。
- 一致する精度がない場合、コンパイラは標準変換を使用しようとします。
- 標準の変換がない場合、コンパイラはユーザー定義の変換を使用しようとします。
- 変換が適用されない場合、コンパイラーはデフォルトのパラメーターが最も少ないバージョンを選択します。
実際的なケース:
次のコードを検討してください:
void foo(int x);
void foo(float x);
foo(3.14)
を呼び出すとき、コンパイルします。浮動小数点定数 3.14
は暗黙的に float
型に変換できるため、コンパイラは void foo(float x)
を最適一致として使用します。
追加メモ:
- 同じ最適一致を持つオーバーロードされたバージョンが複数ある場合、コンパイラはエラーを報告します。
- コンパイラは、最適な一致を判断できない場合にもエラーを報告します。
- 曖昧さを避けるために、関数オーバーロードのシグネチャが明確であることを確認することが最善です。
以上がC++ 関数のオーバーロードでは、最適な一致はどのように決定されますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。