6

次のコードがコンパイラ警告を生成する必要があるかどうかに関する1つの質問(生成されません)。これは、同じ名前/戻りタイプの2つのメソッドを宣言します。1つには、デフォルト値を持つ追加の名前付き/オプションのパラメーターがあります。

注:ルールでは最初のメソッドが呼び出されることが明確に示されているため、技術的には解決策はあいまいではありません。ここ、過負荷解決、3番目の箇条書きを参照してください。この振る舞いも私には直感的です、疑いの余地はありません。

public void Foo(int arg) { ... }

public void Foo(int arg, bool bar = true) { ...} 

Foo(42); // shouldn't this give a compiler warning?

ここでは、コンパイラの警告は直感的なものになると思います。コードは技術的にはクリーンですが(サウンドデザインかどうかは別の質問です:))。

4

2 に答える 2

1

警告は、潜在的にばかげた間違いをプログラマーに通知することです。これはばかげた間違いを引き起こす可能性のある領域なので、はい、警告を生成する必要があります。請願書を作成しようとしていますか?

于 2010-04-19T21:06:17.420 に答える
1

実際、警告が必要だということに同意しません。主な問題は、そのコードが潜在的に正当であるということです。その場合は、警告を明示的に無効にする必要があります。

つまり、一般に、警告が表示されたら、コードを変更して警告を取り除くことができます(そして、おそらく同時にコードを改善することもできます)。ただし、この場合は、意図的にそのようにしたため、警告を取り除くためにコードを変更できない可能性があります。

たとえば、「到達不能コード」の警告は、到達不能コードを削除するだけで警告を取り除くことができるものです。または、「参照が見つかりませんでした」という警告-これは通常、「未定義のタイプ」エラーが発生することを示すシグナルですが、そうでない場合は、単に参照を削除できます。または、「以前のcatch句はすでにすべての例外をキャッチしています」という警告:この場合、新しい句がcatch-allの前に来るようにコードを変更するか、catchを完全に削除する必要があります。

ただし、重要なのは、警告が表示された場合は常にコードを変更する必要があり、変更を加えると常に「より良い」コードになるということです。ただし、この質問の場合、呼び出しは(コンパイラーに関する限り)あいまいではなく、そのようなコードを書くことは常に間違いであると主張できるとは思わないので、そうすべきではありません。警告。

コンパイラが、おそらく最善のアイデアではないことを行うすべてのケースについて警告を発した場合、警告が殺到します。

于 2010-04-19T21:21:07.903 に答える