Ваше предположение, вероятно, верно.Оператор ^=
и оператор if в конце предназначены для предотвращения оптимизаций компилятора / среды выполнения.
Первоначально b
имеет значение false, b ^= true
присваивает true b
, затем b ^= true
присваивает falseв b
, и цикл продолжается.
Если b
циклически переключаться между значениями true и false, компилятору будет сложнее оптимизировать это, поскольку он не видит постоянного значения.
Другое свойство ^
заключается в том, что оба операнда должны оцениваться для оценки результата, в отличие от ||
или &&
.Среда выполнения не может использовать ярлыки.
Оператор if в конце говорит компилятору и среде выполнения: «Не игнорируйте b
! Это важно позже!».