Как уже говорили другие, это зависит от языка и / или компилятора. Мне все равно, насколько быстрым или медленным может быть короткое замыкание или нет, необходимость дублировать код - убийца сделок.
Если A и B на самом деле являются вызовами, которые имеют побочные эффекты (т.е. они не просто возвращают значение, подходящее для сравнения), то я бы сказал, что эти вызовы должны быть преобразованы в назначения переменных, которые затем используются в вашем сравнении , Не имеет значения, всегда ли вам требуются эти побочные эффекты или они требуются только условно, код будет более читабельным, если вы не будете зависеть от того, существует или нет короткое замыкание.
Этот последний бит о читаемости основан на моем ощущении, что уменьшение необходимости ссылаться на внешнюю документацию улучшает читаемость. Чтение книги с кучей новых слов, требующих поиска по словарю, намного сложнее, чем чтение той же самой книги, когда у вас уже есть необходимый словарный запас. В этом случае короткое замыкание невидимо, поэтому любой, кому нужно его искать, даже не знает, что ему нужно его искать.