Составные операторы присваивания



 

В C++ предусмотрены специальные составные операторы присваивания, в которых объединено присваивание с еще одной операцией. Начнем с примера и рассмотрим следующую инструкцию.

 

 

Используя составной оператор присваивания, ее можно переписать в таком виде.

 

 

Пара операторов += служит указанием компилятору присвоить переменной х сумму текущего значения переменной х и числа 10 . Этот пример служит иллюстрацией того, что составные операторы присваивания упрощают программирование определенных инструкций присваивания. Кроме того, они позволяют компилятору сгенерировать более эффективный код.

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

 

 

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

 

 

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

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

 

 

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

 

 

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

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

 

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

 

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

 

 

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

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

 

 

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

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

 

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

 

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

 

 

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

 

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

 

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

 

 

Оператор sizeof во время компиляции программы получает размер типа или значения.

Первая версия возвращает размер заданного типа данных , а вторая – размер заданного значения . Если вам нужно узнать размер некоторого типа данных (например, int ), заключите название этого типа в круглые скобки. Если же вас интересует размер области памяти, занимаемой конкретным значением, можно обойтись без круглых скобок, хотя при желании их можно использовать.

Чтобы понять, как работает оператор sizeof , испытайте следующую короткую программу. Для многих 32‑разрядных сред она должна отобразить значения 1 , 4 , 4 и 8 .

 

 

Как упоминалось выше, оператор sizeof действует во время компиляции программы. Вся информация, необходимая для вычисления размера указанной переменной или заданного типа данных, известна уже во время компиляции.

Оператор sizeof можно применить к любому типу данных. Например, в случае применения к массиву он возвращает количество байтов, занимаемых массивом. Рассмотрим следующий фрагмент кода.

 

 

Для 4 ‑байтных значений типа int при выполнении этого фрагмента кода на экране отобразится число 16 (которое получается в результате умножения 4 байт на 4 элемента массива).

Оператор sizeof главным образом используется при написании кода, который зависит от размера С++‑типов данных. Помните: поскольку размеры типов данных в C++ определяются конкретной реализацией, не стоит полагаться на размеры типов, определенные в реализации, в которой вы работаете в данный момент.

 


Дата добавления: 2018-09-22; просмотров: 386; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!