質問

私は私の好奇心のために主にポーズをとっています簡単な質問があります。

次の2行のコードの違いは何ですか? (C ++で)

for(int i = 0; i < N, N > 0; i++)

for(int i = 0; i < N && N > 0; i++)

の条件の選択は完全に任意ですが、私は&&との違いでちょうど興味、およびます。

私は、任意の手段によってコーディングに初心者ではないんだけど、私はコンマ演算子に煩わさたことがありません。

が、性能/動作の違いはありますかそれは純粋に審美的なのですか?

最後に一つのノートには、私は条件演算子より稚魚に大きなパフォーマンスの魚があるけど、私はただ好奇心が強いです。私にふけるます。

の編集の あなたの答えてくれてありがとう。

これは、私が説明してきたように、コンマ演算子を悪用していたこの質問を促したコードが判明します。私は、違いは何であったか疑問に思い、それは&&演算子なかった理由、それは単に間違って書かれていました。それがうまく働いていたので、私は何もそれと間違っていたとは思いませんでした。私を矯正してくれてありがとう。

役に立ちましたか?

解決

それはそれのように見えますが、

for(int i = 0; i < N, N > 0; i++)

for(int i = 0; i < N && N > 0; i++) 

は等価ではありません。

ここで証明されています。

int main(int argc, char* argv[])
{
  int N = 10;
  int i = 5;

  int val = (N, i);
  cout << val << endl;
}

結果:

5

どのループが終了するときを判断するとき、それはN > 0を使用することを意味します。 N = 10場合、これは常にtrueになり、ループが終了しないことを意味します。

これを実行し、証拠を見ます。

int main(int argc, char* argv[])
{
  int N = 10;
  int i = 5;

  for(int i = 0; i < N, N > 0; i++){
     cout << val << endl;
  }
}
<時間>
bash-2.05$ ./a.out                  
0                                   
1                                   
2                                   
3                                   
4                                   
5                                   
6                                   
7                                   
8                                   
9                                   
10                                  
11                                  
...
142
143
144
145
146
147
148
^C

Nはループ内で変化しない一定または可変である場合 その後、あなただけすなわち、最初の一回それをチェックすることにより、N > 0のチェックを外すことができます。

if (N > 0){
  for (int i = 0; i < N; i++)
   ...
}

他のヒント

そのようなカンマを使用すると、単に に最初の条件を破棄します。

コンマ演算子は、「この順序でこれらのステートメントを実行し、最後の1の値を取る」という意味です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top