Переменные в сочетании с && и || - PullRequest
1 голос
/ 03 мая 2010

Что означают последние строки?

a=0;
b=0;
c=0;

a && b++;
c || b--;

Можете ли вы изменить этот вопрос, чтобы объяснить более интересным примером?

Ответы [ 2 ]

10 голосов
/ 03 мая 2010

Для приведенного вами примера: если a не равно нулю, приращение b; Если c равно нулю, уменьшите b.

Из-за правил оценка короткого замыкания , то есть.

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

#include <stdio.h>
int main()
{
    if (0 && printf("RHS of 0-and\n"))
    {
    }

    if (1 && printf("RHS of 1-and\n"))
    {
    }

    if (0 || printf("RHS of 0-or\n"))
    {
    }

    if (1 || printf("RHS of 1-or\n"))
    {
    }

    return 0;
}

Выход:

RHS of 1-and
RHS of 0-or
1 голос
/ 03 мая 2010
a && b++;    is equivalent to:  if(a) b++;

c || b--;    is equivalent to:   if(!c) b--;

но нет смысла писать подобные выражения. Он не компилируется для лучшего кода и менее читабелен почти во всех случаях, даже если выглядит короче.

...