簡単なプロジェクトでの作業中に、私は完全には理解していない状況を見つけました。次のコードを検討してください。
#include <iostream>
using namespace std;
bool test(int k)
{
cout << "start " << k << endl;
bool result; // it is important that result's value is opposite to initial value of recheck in main()
result = false;
return result;
}
int main()
{
bool recheck;
recheck = true;
for (int i = 2; i > -1; i--)
{
recheck = (recheck || test(i)); // (1)
cout << i << " ???" <<endl;
}
cout << "----------------------------" << endl;
cout << endl;
recheck = true;
for (int i = 2; i > -1; i--)
{
recheck = (test(i) || recheck); //different order that in (1)
cout << i << "???" <<endl;
}
return 0;
}
for
ループから完全に異なる結果を返します。
2 ???
1 ???
0 ???
----------------------------
start 2
2???
start 1
1???
start 0
0???
最初のものtest(int k)
は呼び出されていないようです。オペレーターと関係があるのではないかと思います||
。誰かがそのような行動を説明できますか?