( | 与 || )"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
,我们最终会解引用一个空指针。 ||
运算符通过短路计算来防止这种情况。
我了解到在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
,我们最终会解引用一个空指针。 ||
运算符通过短路计算来防止这种情况。