Страницы

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

пятница, 15 февраля 2019 г.

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()) { // ... } }
И каков порядок вычисления условий, а так же порядок вычисления функций в условии?


Ответ

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

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

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