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-выражением.

Специальные формы операций присвоения позволяют не только изменять структуру выражений, но и оптимизировать создаваемый транслятором программный код. Фрагмент кода, определяющий адрес левого операнда выражения встречается в соответствующем множестве команд процессора лишь один раз.