( | 与 || )"OR" C++ 中的运算符比较

( | vs. || ) "OR" Operator Comparison in C++

我了解到在C/C++中,||是普通的或比较运算符,而|是按位或运算符。
我的问题是,为什么我们有 2 个不同的操作员来处理同一件事?为什么我们不到处使用 |


示例:

int n = 1;
if (n == 1 | n == 2) { cout << "Condition Matched\n"; }

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

其中一个更重要的区别是 || 运算符会短路,而 | 运算符不会。考虑:

void f(int* p)
{
    if (!p || *p == 0) 
    {
        // Do something
    }
}

如果我们在这里使用 | 运算符并且 p 是 nullptr,我们最终会解引用一个空指针。 || 运算符通过短路计算来防止这种情况。