Приоритет оператора C++ для побитового И и логического ИЛИ
На этой странице я узнал, что приоритет оператора Bitwise AND выше, чем Logical 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
Это означает, что логическое ИЛИ работает первым. Означает ли это, что здесь нарушается правило приоритета оператора?
3 ответа
Приоритет просто означает, что выражение написано, как показано ниже
( (a++ || (b++ & c++)))
Как только вы это сделаете, короткое замыкание означает, что оценивается только первое выражение.
Вот почему a = 2
но b
а также c
без изменений.
Эта ссылка может помочь вам:
http://en.cppreference.com/w/cpp/language/operator_precedence
старшинство
10 & Побитовое И
11 ^ Побитовое XOR (исключающее или)
12 | Побитовое ИЛИ (включительно или)
13 && Logical AND
14 || Логическое ИЛИ
это означает, что '&' оценивается перед '||',
Это совершенно нормально узнать о приоритетности этих операторов, просто из любопытства. В реальной жизни этот код без скобок, чтобы прояснить намерение, просто неприемлем.
Если левая сторона || имеет ненулевое значение, тогда правая сторона вообще не оценивается. Это гарантированно не будет оценено.