( | vs. || ) C++ 中的“OR”运算符比较

Har*_*dal 0 c++ bit-manipulation

我知道在 C/C++ 中,这||是正常的 OR 比较运算符,也|就是按位 OR 运算符。
我的问题是,为什么我们对同一件事有 2 个不同的运营商?为什么我们不在|任何地方使用?


例子:

int n = 1;
if (n == 1 | n == 2) { cout << "Condition Matched\n"; }
Run Code Online (Sandbox Code Playgroud)

截屏

这也有效,因为|运算符两侧的条件,即:(n == 1)(n == 2)无论如何都被评估为布尔值/单位值。我错过了什么吗?

Kyl*_*yle 5

更重要的区别之一是||操作员短路,但|操作员没有。考虑:

void f(int* p)
{
    if (!p || *p == 0) 
    {
        // Do something
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我们在|这里使用运算符并且 p was nullptr,我们最终会取消引用一个空指针。该||运营商通过短路评价防止这一点。