Нет, это не разумная практика кодирования. Помимо семантики короткого замыкания и упорядочения ||
, он выполняет операцию, отличную от |
.
||
возвращает 1, если любой из операндов ненулевой, 0, если оба равны нулю.
|
возвращает поразрядно или его операндов.
Как это происходит, значение истинности результата будет таким же (я понял это, когда набирал этот ответ). Но рассмотрим соответствующие операторы &&
против &
. Это:
if (isFoo() && isBar())
будет истинным, если и только если обе функции возвращают ненулевое значение, но это:
if (isFoo() & isBar())
будет истинным в том и только в том случае, если битовая и результаты отличны от нуля. Если isFoo()
возвращает 1, а isBar()
возвращает 2 (оба истинных результата), то isFoo & isBar()
будет 0 или false.
Обратите внимание, что функции is*()
, объявленные в <ctype.h>
, указываются только для возврата ненулевого значения для true; они могут и действительно возвращают значения, отличные от 0 или 1.
Если вы действительно хотите избежать поведения короткого замыкания ||
, присвойте результаты временным:
bool is_foo = isFoo();
bool is_bar = isBar();
if (is_foo && is_bar) ...