C/C++, ленивые вычисления

233
07 ноября 2018, 19:30

Являются ли вычисления условий в C/C++ ленивыми?

То есть, есть ли разница между:

if ( ( a > b) && (c > d) )
{
    // ...
}

И:

if (a > b)
{
    if (c > d)
    {
        // ...
    }
}

А так же между:

if ( (a() > b()) && 
     (c() > d()) )
{
    // ...
}

И:

if (a() > b())
{
    if (c() > d())
    {
        // ...
    }
}

И каков порядок вычисления условий, а так же порядок вычисления функций в условии?

Answer 1

Да, слава богу булевая операция И (&&) в стандарте ленивая. Причём порядок только слева направо.

Unlike the bitwise binary & operator, the && operator guarantees left-to-right evaluation;
if the second operand is evaluated, there is a sequence point between the evaluations of
the first and second operands. If the first operand compares equal to 0, the second
operand is not evaluated.
READ ALSO
Почему программа на Java работает неправильно?

Почему программа на Java работает неправильно?

Я написал простенькую программу, которая должна просить ввести 1 символ, пока не будет введена точкаЕсли точка введена, то отображается количество...

261
Упаковка стандартных байтов(8 бит) в 6 бит

Упаковка стандартных байтов(8 бит) в 6 бит

На вход поступает какой-то файл (не важно какой)Мне необходимо упаковать 8-битные байты в 6-битные

198
Отрисовка переданного Sprite

Отрисовка переданного Sprite

Есть два класса, назовем их txtManager и актер ObjtxtManager создает и отдает спрайт:

207