Cтраница 2
Постфиксная форма записи операции инкремента вызывает увеличение переменной с после того, как она использована в операторе вывода. При префиксной форме переменная с изменяется до того, как будет использована в операторе вывода. [16]
Перегрузка постфиксной формы операции инкремента представляет некоторые трудности, так как компилятор должен быть способен различать сигнатуры перегруженных функций-операций инкремента в префиксной и постфиксной формах. [17]
![]() |
Демонстрация различия между операциями преинкремента и постинкремента. [18] |
В качестве операнда операций инкремента или декремента может быть использовано только простое имя переменной. [19]
![]() |
Приоритет операций, упомянутых в книге до настоящего момента Резюме. [20] |
Поэтому программист должен избегать команд с операциями инкремента или декремента, в которых некоторая переменная подвергается их воздействию более одного раза. [21]
Все рассмотренное в этом разделе по отношению к перегрузке операций инкремента в префиксной и постфиксной формах, приложимо и к перегрузке операций декремента. [22]
Если операции инкремента или декремента помещаются перед переменной, они называются соответственно преинкрементными или предекрементными операциями. Если операции инкремента или декремента помещаются после переменной, они называются соответственно постинкрементными или постдекрементными операциями. Операция преинкремента ( предекремента) над переменной вызывает увеличение ( уменьшение) этой переменной на 1, затем новое значение переменной используется в выражении, в котором она появляется. [23]
Если операция инкремента или декремента помещена перед переменной, говорят о префиксной форме записи инкремента или декремента. Если операция инкремента или декремента записана после переменной, то говорят о постфиксной форме записи. При префиксной форме переменная сначала увеличивается или уменьшается на единицу, а затем это ее новое значение используется в том выражении, в котором она встретилась. При постфиксной форме в выражении используется текущее значение переменной, и только после этого ее значение увеличивается или уменьшается на единицу. [24]
Операции инкремента () и декремента ( -) могут быть как префиксными, так и постфиксными. В первом случае сначала выполняется операция инкремента или декремента, а затем результат операции используется в выражении. [25]
Язык C был разработан Бьерном Страуструпом в Bell Laboratories ( St86) и первоначально назывался С с классами. Название C включает в себя операцию инкремента языка С () и указывает на то, что C - версия С с расширенными возможностями. [26]
Все операции инкремента и декремента в префиксной и постфиксной формах могут быть перегружены. Мы увидим, как компилятор различает префиксные или постфиксные варианты операций инкремента или декремента. [27]
Чтобы перегрузить операции инкремента, разрешив тем самым использование и преинкремента и постинкремента, каждая перегруженная функция-операция должна иметь различную сигнатуру, чтобы компилятор мог определить, какая из операций подразумевается. Префиксные версии перегружаются точно так же, как перегружаась бы любая другая префиксная одноместная операция. На самом деле пользователь не передает значение этого специального аргумента целого типа. Это просто помогает компилятору различить префиксные и постфиксные версии операций инкремента и декремента. [28]
Чтобы перегрузить операцию инкремента для получения возможности использования и префиксной, и постфиксной форм, каждая из этих двух перегруженных функций-операций должна иметь разную сигнатуру, чтобы компилятор имел возможность определить, какая версия имеется в виду в каждом конкретном случае. Префиксный вариант перегружается точно так же, как любая другая префиксная унарная операция. Обеспечение уникальной сигнатуры функции операции постфиксной формы инкремента достигается с помощью фиктивного аргумента типа int. Пользователь может не задавать никакого значения этому аргументу. Он вводится просто для того, чтобы помочь компилятору различать префиксные и постфиксные формы операций инкремента и декремента. [29]