Страница 42 из 82 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-выражением. Специальные формы операций присвоения позволяют не только изменять структуру выражений, но и оптимизировать создаваемый транслятором программный код. Фрагмент кода, определяющий адрес левого операнда выражения встречается в соответствующем множестве команд процессора лишь один раз. |