Приоритет оператора 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 без изменений.

codepad

Эта ссылка может помочь вам:

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

старшинство

10 & Побитовое И
11 ^ Побитовое XOR (исключающее или)
12 | Побитовое ИЛИ (включительно или)
13 && Logical AND
14 || Логическое ИЛИ

это означает, что '&' оценивается перед '||',

Это совершенно нормально узнать о приоритетности этих операторов, просто из любопытства. В реальной жизни этот код без скобок, чтобы прояснить намерение, просто неприемлем.

Если левая сторона || имеет ненулевое значение, тогда правая сторона вообще не оценивается. Это гарантированно не будет оценено.

Другие вопросы по тегам