#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.
Комментариев нет:
Отправить комментарий