2016-12-15 4 views
-2

私は私の質問を説明するために以下のコードを使用します。C++で多くの比較演算を書くのに最も良い議論は何ですか?

if(a== 0) 
{ 
    if(b==0) 
    { 
     if(c == 0) 
     { 
      // 
      } 
    } 

} 

if((a==0)&&(b==0)&&(c==0)) 
{ 

} 

対最初のコードの断片は、それが機能から来るときに第二と同じです。 2番目はより簡潔で分かりやすいです。私はちょうど両方のコードの断片が同じを実行するかどうかのコードのコンパイル後に疑問に思う。秒は速く走るでしょうか?ここでは、多くの比較があると仮定します。例

​​
+1

なぜコンパイラがコードを発行していないのか、それとも高速であるかを調べるためにテストを実行する – pm100

+2

最適化コンパイラでコンパイルされた実際のアプリケーションでは、これらのようなものがあなたが心配しているものであれば、あなたはおもちゃのサンプルプログラムで遊んでいると思うか、もっと大きな問題を抱えていると思われます。 –

+0

スタイルに関するちょっとしたメモ: 'if(a == 0 && b == 0&c == 0)'に余分な括弧は必要ありません。 –

答えて

3

のために私は両方のコードの断片は、同じことを実行するかどうか、コードのコンパイル後に不思議。 ...

意味的に等価にある... builtin logical operators are short-circuitedを連鎖し、ということを意味...

if(a && b) { } 

- そこ

は、ほとんどすべての重要なパフォーマンスの違いではありません

if(a) { if (b) { } } 

にかかわらず、the discussion in this question( "Can Cコンパイラオプティマイザ論理AND式でオペランドのメモリアクセスを短絡したり並べ替えたりしたのですか?」)は、論理式が短絡していてもコンパイラにいくつかの最適化の自由があることを指摘しています。

そのため、パフォーマンスがを測定し、生成されたアセンブリを見ている変更されていないことを確認することの唯一の真の方法


"スタイル"に関しては、私は、これは純粋に主観的な問題だと思います。

関連する問題