Поскольку bool
является более узким типом, чем int
, оба аргумента неявно преобразуются в int
до оценки XOR. true
принимает значение 1
, а false
принимает значение 0
.
Если этот результат не равен нулю, запускается тело if
, и это происходит тогда и только тогда, когда body1awake
не равно body2awake
.
Так что, возможно, эквивалент
if (body1awake != body2awake)
был бы лучше. Если автор думает, что его путь быстрее, ему нужен строгий разговор с оптимизацией компилятора и введением в диалог как-будто правила.