Являются ли вычисления условий в C/C++ ленивыми?
То есть, есть ли разница между:
if ( ( a > b) && (c > d) )
{
// ...
}
И:
if (a > b)
{
if (c > d)
{
// ...
}
}
А так же между:
if ( (a() > b()) &&
(c() > d()) )
{
// ...
}
И:
if (a() > b())
{
if (c() > d())
{
// ...
}
}
И каков порядок вычисления условий, а так же порядок вычисления функций в условии?
Ответ
Да, слава богу булевая операция И (&&) в стандарте ленивая. Причём порядок только слева направо.
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.
Комментариев нет:
Отправить комментарий