Условные обозначения часто включают операторов короткого замыкания. Итак, учитывая этот пример:
if ( a=func(x) && b=func(y) )
{
// do this
}
Это может быть не сразу очевидно, но второе назначение произойдет, только если первое вернуло >0
, и если func(y)
имел другие побочные эффекты, которые вы ожидали, они также не произошли бы.
Короче говоря, если вы знаете, что делаете и понимаете побочные эффекты, то в этом нет ничего плохого. Тем не менее, вы должны учитывать возможность того, что кто-то другой может поддерживать ваш код, когда вы ушли, и они могут быть не такими опытными, как вы.
Кроме того, будущие сопровождающие могут подумать, что вы намеревались сделать следующее:
if ( a==func(x) && b==func(y) ) ...
Если они «исправят» ваш код, они фактически его нарушат.