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)无论如何都被评估为布尔值/单位值。我错过了什么吗?
更重要的区别之一是||操作员短路,但|操作员没有。考虑:
void f(int* p)
{
if (!p || *p == 0)
{
// Do something
}
}
Run Code Online (Sandbox Code Playgroud)
如果我们在|这里使用运算符并且 p was nullptr,我们最终会取消引用一个空指针。该||运营商通过短路评价防止这一点。