C++. Бархатный путь. Часть 1 - Специальные формы операций присваивания
ОГЛАВЛЕНИЕ
2.8. Специальные формы операций присваивания
В процессе трансляции выражений на этапе генерации кода транслятор строит последовательности машинных кодов, реализующие закодированные в выражениях действия. Например, при трансляции выражения
A = A + 125
транслятор, прежде всего, генерирует код для вычисления значения выражения A + 125 и присвоения результата переменной A. При этом фрагмент кода, вычисляющий адрес переменной A дважды войдёт во множество команд процессора, реализующих это выражение.
В целях упрощения структуры подобных операторов в C++ применяются комбинированные (или сокращённые) формы операторов присваивания.
*= Операция присвоения произведения.
A *= B
Присвоение левому операнду произведение значений левого и правого операндов. Операция по своему результату эквивалентна простой форме операции присвоения, у которой правый операнд имеет вид произведения A * B, левый операнд имеет вид A. При этом A является модифицируемым l-выражением:
A = A * B
/= Операция присвоения частного от деления.
A /= B + 254
Присвоение левому операнду частного от деления значения левого операнда на значение выражения правого операнда. Операция по своему результату эквивалентна простой форме операции присвоения, у которой правый операнд имеет вид
A / (B + 254)
левый операнд прелставляется выражением A. Очевидно, что при этом A должно быть модифицируемым l-выражением:
A = A / (B + 254)
%= Операция присвоения остатка от деления.
A %= B
Левый операнд должен быть модифицируемым l-выражением.
+= Операция присвоения суммы.
A += B
Левый операнд должен быть модифицируемым l-выражением.
-= Операция присвоения разности.
A -= B
Левый операнд должен быть модифицируемым l-выражением.
<<= Операция присвоения результата операции побитового сдвига влево на
количество бит, равное значению правого целочисленного операнда.
A <<= B
Левый операнд должен быть модифицируемым l-выражением.
>>= Операция присвоения результата операции побитового сдвига вправо
на количество бит, равное значению правого целочисленного операнда.
A <<= B
Левый операнд должен быть модифицируемым l-выражением.
&= Операция присвоения результата поразрядной конъюнкции битовых
представлений значений целочисленных операндов.
A &= B
Левый операнд должен быть модифицируемым l-выражением.
|= Операция присвоения результата поразрядной дизъюнкции битовых
представлений значений целочисленных операндов.
A |= B
Левый операнд должен быть модифицируемым l-выражением.
^= Операция присвоения результата поразрядной исключающей дизъюнкции
битовых представлений значений целочисленных операндов.
A ^= B
Левый операнд должен быть модифицируемым l-выражением.
Специальные формы операций присвоения позволяют не только изменять структуру выражений, но и оптимизировать создаваемый транслятором программный код. Фрагмент кода, определяющий адрес левого операнда выражения встречается в соответствующем множестве команд процессора лишь один раз.