= Простая форма операции присваивания
Левый операнд операции присваивания является леводопустимым выражением.
В качестве правого операнда операции присваивания может выступать любое выражение. Значение правого операнда присваивается левому операнду. Значение выражения оказывается равным значению правого операнда. Не существует никаких ограничений на структуру этого операнда. Правый операнд может состоять из множества выражений, соединенных операциями присвоения:
An=…=A3=A2=A1;
где A1, A2, A3, …, An являются выражениями. Для определения значений выражений подобной структуры в C++ существуют правила группирования операндов выражений сложной структуры (эти правила подробно будут описаны ниже). В соответствии с одним из этих правил операнды операции присвоения группируются справа налево:
An = (An-1=…=(A3=(A2=A1))…);
Очевидно, что в таком выражении все операнды, кроме самого правого, должны быть модифицируемыми 1-ми выражениями. В результате выполнения этого выражения операндам An, An-1, … A3, A2 будет присвоено значение операнда A1.
Специальные формы операций присваивания
В процессе трансляции выражений на этапе генерации кода транслятор строит последовательности машинных кодов, реализующие закодированные в выражениях действия. Например, при трансляции выражения А=А+125 транслятор, прежде всего, генерирует код для вычисления значения выражения A + 125 и присвоения результата переменной A. При этом фрагмент кода, вычисляющий адрес переменной A, дважды войдёт во множество команд процессора, реализующих это выражение.
В целях упрощения структуры подобных операторов в C++ применяются комбинированные (или сокращённые) формы операторов присваивания. Для приведенного выше примера А+=125. Присвоение левому операнду произведение значений левого и правого операндов.
*= Операция присвоения произведения. Например, A *= B.
/= Операция присвоения частного от деления. Например, A /= B + 254
%= Операция присвоения остатка от деления. Например, A %= B
+= Операция присвоения суммы. Например, A += B
-= Операция присвоения разности. Например, A -= B
<<= Операция присвоения результата операции побитового сдвига влево на количество бит, равное значению правого целочисленного операнда. Например, A <<= B.
>>= Операция присвоения результата операции побитового сдвига вправо на количество бит, равное значению правого целочисленного операнда. Например, A <<= B.
&= Операция присвоения результата поразрядной конъюнкции битовых представлений значений целочисленных операндов. Например, A &= B.
|= Операция присвоения результата поразрядной дизъюнкции битовых представлений значений целочисленных операндов. Например, A |= B.
^= Операция присвоения результата поразрядной исключающей дизъюнкции битовых представлений значений целочисленных операндов. Например, A ^= B.
Специальные формы операций присвоения позволяют не только изменять структуру выражений, но и оптимизировать создаваемый транслятором программный код. Фрагмент кода, определяющий адрес левого операнда выражения, встречается в соответствующем множестве команд процессора лишь один раз.
Операции выбора компонентов структурированного объекта
К операциям выбора компонентов структурированного объекта относятся:
. Операция прямого выбора – точка
-> Операция косвенного выбора
Об этих операциях будет сказано позже, после определения понятия класса и объекта-представителя класса.
Операции обращения к компонентам класса
К операциям обращения к компонентам класса относятся:
. Операция обращения к компоненте класса по имени объекта или ссылки на объект (левый операнд операции) и указателю на компоненту класса (правый операнд операции). Например, student.year_birthday.
-> Операция обращения к компоненте класса по указателю на объект (левый операнд операции) и указателю на компоненту класса (правый операнд операции). Например, student->year_birthday.
:: Операция доступа к компоненте класса по имени класса и имени компоненты. Например, student::year_birthday.
Операция управления процессом вычисления значений
, Операция запятая. Например, A &= B, A * B, -A.
Группирует выражения слева направо. Разделённые запятыми выражения вычисляются последовательно слева направо, в качестве результата сохраняются тип и значение самого правого выражения.
Эта операция формально также является бинарной операцией, хотя операнды этой операции абсолютно не связаны между собой.
Операция вызова функции
() Операция вызова. Например, sin(x).
Играет роль бинарной операции при вызове функции. Левый операнд представляет собой выражение, значением которого является адрес функции. Правый операнд является разделённым запятыми списком выражений, определяющих значения параметров.
Операция явного преобразования типа
() Операция преобразования (или приведения) типа
Эта бинарная операция в контексте так называемого постфиксного выражения и в контексте выражения приведения обеспечивает изменение типа значения выражения, представляемого вторым операндом. Информация о типе, к которому преобразуется значение второго операнда, кодируется первым выражением, которое является спецификатором типа. Существуют две формы операции преобразования типа: каноническая, при которой в скобки заключается первый операнд (в выражениях приведения), и функциональная (в постфиксных выражениях), при которой в скобки заключается второй операнд. При функциональной форме операции преобразования типа спецификатор типа представляется одним идентификатором. Для приведения значения к типу unsigned long следует использовать лишь каноническую форму операции преобразования.