从this page开始,我知道按位AND的运算符优先级高于逻辑OR。 但是,以下程序会产生意外输出。
#include<iostream>
using namespace std;
int main()
{
int a = 1;
int b = 2;
int c = 4;
if ( a++ || b++ & c++)
{
cout <<a <<" " << b <<" " << c <<" " <<endl;
}
return 0;
}
输出
2 2 4
这意味着逻辑OR首先起作用。这是否意味着违反了运营商优先规则?
答案 0 :(得分:3)
答案 1 :(得分:1)
此链接可以帮助您:
http://en.cppreference.com/w/cpp/language/operator_precedence
<强>优先强>
10 &amp;按位和
11 ^按位异或(异或)
12 |按位OR(包含或)
13 &amp;&amp;逻辑和
14 ||逻辑OR
这意味着在'||'之前评估'&amp;'。
答案 2 :(得分:0)
仅仅出于好奇,了解这些运营商的优先权是完全可以的。在真实的生活中,没有括号的代码使意图绝对清晰是不可接受的。
如果是||的左侧具有非零值,则根本不评估右侧。它保证不被评估。