在一个简单项目的工作中,我发现了一些我不完全理解的情况。考虑以下代码:
#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)
甚至没有被调用。我怀疑它与 ||
运算符有关。有人可以解释这种行为吗?
最佳答案
内置的||
短路:如果左操作数为true
,则不计算右操作数(无论正确的操作数是,因为在这种情况下,||
表达式的值保证为 true
。
为了完整性,但与问题无关:在 c++ 中,||
运算符是可重载的,就像许多其他运算符一样。如果使用过载,则不会发生短路。
关于C++逻辑替代运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12079928/