Це правильно, оператор АБО короткого замикання (||) завжди буде повертати те саме значення, що й оператор АБО, що не має короткого замикання (|) (*)
Однак якщо перший операнд істинний, оператор короткого замикання не спричинить оцінку другого операнда, тоді як оператор, що не має короткого замикання, завжди спричинятиме оцінку обох операндів. Це може мати вплив на продуктивність, а іноді і на побічні ефекти.
Отже, є користь для обох: якщо ви дбаєте про продуктивність, а оцінка другого операнда не спричиняє жодних побічних ефектів, (або якщо ви не переймаєтесь ними), то будь-якими способами використовуйте оператор короткого замикання. . Але якщо з якихось причин вам потрібні побічні ефекти другого операнда, то вам слід скористатися оператором без короткого замикання.
Приклад, коли слід використовувати оператор без короткого замикання:
if( write_customer_to_database() != SUCCESS |
write_supplier_to_database() != SUCCESS |
write_order_to_database() != SUCCESS )
{
transaction_rollback();
}
(*) За винятком деяких дійсно перекручених сценаріїв, коли оцінка першого операнда на хибні причини викликає побічний ефект, другий операнд оцінює як істинний, а не хибний.