Это зависит.
Если &&
является обычным логическим оператором короткого замыкания, то это нормально, потому что есть точка последовательности.array[x]
будет использовать новое значение.
Если &&
является пользователем (или библиотекой), определенным перегруженным оператором, то нет короткого замыкания, а также нет гарантии точки последовательности между оценкойx--
и оценка array[x]
.Это выглядит маловероятным, учитывая ваш код, но без контекста невозможно сказать наверняка.Я думаю, что возможно, с тщательным определением array
, расположить его таким образом.
Вот почему почти всегда плохая идея перегрузить operator&&
.
Кстати,if ((x > 0) && array[--x])
имеет очень похожий эффект (опять же, при условии, что оператор не перегружает махинации), и, на мой взгляд, более понятен.Разница в том, будет ли x
уменьшен после 0, на что вы можете положиться или не положиться.