Мы все знаем, что логический &&
оператор закорачивает, если левый операнд равен false
, потому что мы знаем, что если один операнд равен false
, тогда результат также будет false
.
Почему побитовый оператор &
также не закорачивает? Если левый операнд равен 0
, то мы знаем, что результат также равен 0
. Каждый язык, на котором я это тестировал (C, Javascript, C#), оценивает оба операнда вместо того, чтобы останавливаться после первого.
Есть ли какая-либо причина, по которой было бы плохой идеей разрешить короткое замыкание оператора &
? Если нет, то почему большинство языков не делают это коротким замыканием? Вроде очевидная оптимизация.