Isso está correto, o operador OR de curto-circuito (||) sempre retornará o mesmo valor que o operador OR de não-curto-circuito (|). (*)
No entanto, se o primeiro operando for verdadeiro, o operador de curto-circuito não causará avaliação do segundo operando, enquanto o operador sem curto-circuito sempre causará avaliação de ambos os operandos. Isso pode ter um impacto no desempenho e, às vezes, em efeitos colaterais.
Portanto, existe uma utilidade para ambos: se você se importa com o desempenho e a avaliação do segundo operando não produz efeitos colaterais (ou se você não se importa com eles), então use o operador de curto-circuito . Mas se, por algum motivo, você precisar dos efeitos colaterais do segundo operando, use o operador que não seja de curto-circuito.
Um exemplo em que você deve usar o operador que não seja de curto-circuito:
if( write_customer_to_database() != SUCCESS |
write_supplier_to_database() != SUCCESS |
write_order_to_database() != SUCCESS )
{
transaction_rollback();
}
(*) Exceto por um cenário realmente pervertido, em que a avaliação do primeiro operando como falso causa por efeito colateral o segundo operando a ser avaliado como verdadeiro em vez de falso.