2017-02-05 4 views
-1

Почему выходные данные этого кода не отображаются count==4? operator-- имеет больший приоритет над operator!, правильно?оператор!() И оператор -(), если условие

int main() 
{ 
    int found = 0, count = 5; 
    if (!found || --count == 0) 
     cout << "danger" << endl; 
    cout << "count=" << count<< endl; 
} 
+0

[Оценка короткого замыкания] (https://en.wikipedia.org/wiki/Short-circuit_evaluation) –

+0

В выражении есть другие операторы. Относительный приоритет '!' И '--' не имеет значения, так как' || 'выполняет оценку короткого замыкания (то есть'! Found' будет сначала оценена, а '--count == 0' будет только оценивается, если '! found' отличен от нуля, а это не так). – Peter

+0

Я знаю о коротком замыкании, но не является ли префиксным декрементом первым приоритетом? я имею в виду, не следует ли сначала уменьшить количество до 4, а затем проверить состояние? –

ответ

0

Старшинства -- и ! здесь не имеет значения, так как они оба префикса и применяются к различным подвыражению в любом случае. То, что вы наблюдаете, - это короткое замыкание ||: поскольку левый операнд равен true, результат OR равен true независимо от значения правильного операнда, поэтому нет необходимости тратить время на его оценку, так что это не так.

+0

Большое вам спасибо! :) –

Смежные вопросы