Выбрать главу

Составные версии операторов присваивания существуют для всех бинарных операторов (т.е. для всех операторов, которые работают с двумя операндами). Таким образом, при таком общем формате бинарных операторов присваивания

переменная = переменная ор выражение;

общая форма записи их составных версий выглядит так:

переменная ор = выражение;

Здесь элемент ор означает конкретный арифметический или логический оператор, объединяемый с оператором присваивания.

А вот еще один пример. Инструкция

х = х - 100;

аналогична такой:

x -= 100;

Обе эти инструкции присваивают переменной х ее прежнее значение, уменьшенное на 100.

Составные операторы присваивания можно часто встретить в профессионально написанных С++-программах, поэтому каждый С++-программист должен быть с ними на "ты" .

Оператор "запятая"

Не менее интересным, чем описанные выше операторы, является такой оператор C++, как "запятая". Вы уже видели несколько примеров его использования в цикле for, где с его помощью была организована инициализация сразу нескольких переменных. Но оператор "запятая" также может составлять часть выражения. Его назначение в этом случае — связать определенным образом несколько выражений. Значение списка выражений, разделенных запятыми, определяется в этом случае значением крайнего справа выражения. Значения других выражений отбрасываются. Следовательно, значение выражения справа становится значением всего выражения-списка. Например, при выполнении этой инструкции

var = (count=19, incr=10, count+1);

переменной count сначала присваивается число 19, переменной incr — число 10, а затем к значению переменной count прибавляется единица, после чего переменной var присваивается значение крайнего справа выражения, т.е. count+1, которое равно 20. Круглые скобки здесь обязательны, поскольку оператор "запятая" имеет более низкий приоритет, чем оператор присваивания.

Чтобы понять назначение оператора "запятая", попробуем выполнить следующую программу.

#include <iostream>

using namespace std;

int main()

{

 int i, j;

 j = 10;

 i = (j++, j+100, 999+j);

 cout << i;

 return 0;

}

Эта программа выводит на экран число 1010. И вот почему: сначала переменной j присваивается число 10, затем переменная j инкрементируется до 11. После этого вычисляется выражение j+100, которое нигде не применяется. Наконец, выполняется сложение значения переменной j (оно по-прежнему равно 11) с числом 999, что в результате дает число 1010.

По сути, назначение оператора "запятая" — обеспечить выполнение заданной последовательности операций. Если эта последовательность используется в правой части инструкции присваивания, то переменной, указанной в ее левой части, присваивается значение последнего выражения из списка выражений, разделенных запятыми. Оператор "запятая" по его функциональной нагрузке можно сравнить со словом "и", используемым в фразе: "сделай это, и то, и другое...".

Несколько присваиваний "в одном"

Язык C++ позволяет применить очень удобный метод одновременного присваивания многим переменным одного и того же значения. Речь идет об объединении сразу нескольких присваиваний в одной инструкции. Например, при выполнении этой инструкции переменным count, incr и index будет присвоено число 10.

count = incr = index = 10;

Этот формат присвоения нескольким переменным общего значения можно часто встретить в профессионально написанных программах.

Использование ключевого слова sizeof

Иногда полезно знать размер (в байтах) одного из типов данных. Поскольку размеры встроенных С++-типов данных в разных вычислительных средах могут быть различными, а знание размера переменной во всех ситуациях имеет важное значение, то для решения этой проблемы в C++ включен оператор (действующий во время компиляции программы), который используется в двух следующих форматах.

sizeof (type)