1

这个页面,我知道按位与的运算符优先级高于逻辑或。但是,以下程序给出了意外的输出。

#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

这意味着逻辑或首先起作用。这是否意味着这里违反了运算符优先规则?

4

3 回答 3

3

优先级只是意味着表达式写如下

  ( (a++ || (b++ & c++)))

一旦你这样做了,短路意味着只评估第一个表达式。

这就是为什么a = 2bc不变的原因。

键盘

于 2013-06-28T06:25:03.233 回答
1

这个链接可以帮助你:

http://en.cppreference.com/w/cpp/language/operator_precedence

优先级

10 & 按位与
11 ^ 按位异或(异或)
12 | 按位或(包括或)
13 && 逻辑与
14 || 逻辑或

这意味着在'||'之前评估'& ' .

于 2013-06-29T20:59:38.923 回答
0

出于好奇,了解这些运算符的优先级是完全可以的。在现实生活中,这种没有括号以使意图绝对清晰的代码是不可接受的。

如果 || 的左侧 具有非零值,则根本不评估右侧。它保证不被评估。

于 2016-06-08T20:57:04.927 回答