Страницы

Поиск по вопросам

четверг, 9 января 2020 г.

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

#cpp #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())
    {
        // ...
    }
}


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


Ответы

Ответ 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.

Комментариев нет:

Отправить комментарий