0

重複の可能性:
「for(;;)」は「while (TRUE)」より速いですか? そうでない場合、なぜ人々はそれを使用するのですか?

for(;;)代わりに著者が使用するプログラミング本(Java)を読んでいますwhile(true)。このことは本当に私を悩ませ始めたので、どちらを使うのが最善で、違いがあるかどうかを確認する必要があると思いました. 考えられる無限ループは次のとおりです。

for(;;){

}

while(true){

}

do{

}while(true)
  • どちらを使用するのが好ましいですか?
  • パフォーマンスに違いはありますか (while の場合に true かどうかをテストする必要があるなど)、それとも同じものにコンパイルされていますか?
4

4 に答える 4

6

それらは同じものにコンパイルされており、単にスタイルの問題です。年配のプログラマーは認識for(;;)しているかもしれませんが、私はおそらく単にを使用しますwhile(true)

于 2012-04-11T21:18:16.860 に答える
1

ええ、これはスタイルの問題でありwhile(true)、意図がすぐに明確になるので、私は好みます。for(;;)私には何も言わない。

于 2012-04-11T21:19:22.520 に答える
1

疑わしい場合は、測定してください。

他に何もない場合は、3つのバージョンすべてをコーディングし、それぞれについて生成されたアセンブリを確認します。コンパイラが非常に愚かでない限り、3つすべてに対してまったく同じコードを生成するのは本当のお金だと思います。

編集

FWIW、gccは3つすべてに対して同じコードを生成します(少なくとも私が書いた非常に単純なケースでは)。 while(true)コンパイル時に計算可能です。テストを実行する必要はありません。ループの最初にジャンプバックするようにハードコーディングするだけです。

于 2012-04-11T21:20:00.453 に答える
1

パフォーマンス的には同じである必要がありますが、そうでない場合でも、速度は読みやすさほど重要ではありません。最良の方法は、コードを見る人によって無限ループとしてすぐに認識される方法です。while (true)それが最も基本的なケースなので、私は傾向がありますが、それは誰がコードを見ているかによって異なります。

于 2012-04-11T21:20:21.710 に答える