C++逻辑替代运算符

标签 c++ logical-operators operator-precedence

在一个简单项目的工作中,我发现了一些我不完全理解的情况。考虑以下代码:

#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/

相关文章:

java - Java中方程 "i+++++i"的计算顺序是什么?

c++ - 每台机器安装 mapi 自定义表单服务器(基于消息)

javascript - 将字节数组从 ActiveX 传递到 javascript,反之亦然

c++ - 代码理解问题

python - DataFrame和Series之间如何进行逻辑运算?

r - 根据行子集上的逻辑条件对数据框进行子集化

c++ - 谁定义了 C 运算符优先级和关联性?

c++ - 二进制搜索陷入无限循环?

java - 当只有一个条件为真时,如何使条件语句返回真?

CSS 组合子优先级