Часто обсуждается (действительно, я думаю, что даже стандарт ссылается на него), что a @= b
и a = a @ b
эквивалентны. Здесь я использую @
для обозначения диапазона символов, таких как &
и ^
.
Однако я сомневаюсь, что они эквивалентны во время выполнения, особенно если a
является атомным типом. Например:
std::atomic_int a;
a ^= 1;
(который является атомным способом переключения a
), рассматривается как эквивалентный
a = a ^ 1;
Но этот второй способ состоит из не атома из-за назначения.
Поэтому я сомневаюсь в их буквальной эквивалентности, и компилятор (независимо от того, что говорит стандарт) не способен изменить более короткую форму на более длинную.
Правильно ли я?