Q:

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

Являются ли вычисления условий в C/C++ ленивыми?
То есть, есть ли разница между:
if ( ( a > b) && (c > d) )
{
    // ...
}

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

А так же между:
if ( (a() > b()) && 
     (c() > d()) )
{
    // ...
}

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

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

A:

Да, слава богу булевая операция И (&&) в стандарте ленивая. Причём порядок только слева направо.
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.

