ループ条件のためでパフォーマンスの違いは?
-
11-09-2019 - |
質問
私は私の好奇心のために主にポーズをとっています簡単な質問があります。
次の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の値を取る」という意味です。
所属していません StackOverflow