    Не существует операторов, непосредственно производящих действия над 
ссылками. Все операции совершаются только над соответствующими объектами. 
Добавьте между строками 13 и 14 листинга 12.15 следующий оператор: 

    iref++ ; 

    Компилятор сгенерирует код, инкрементирующий ivar - переменную, на которую 
ссылается iref. Оператор не совершит никаких действий непосредственно над iref. 
    Ссылки также могут ссылаться на константы. Разумеется, вы не можете 
присвоить значение непосредственно ссылке. Объявление 

     int &iref = 1234;	// ??? 

вызовет сообщение об ошибке при компиляции, поскольку 1234 не является 
объектом, на который iref сможет сослаться. Вы можете, конечно, объявить 
константную ссылку на допустимый объект следующим образом: 

    int х = 1234;	// Объявление и инициализация целочисленного объекта
   const   int &iref = x;           // Объявление iref как константной ссылки на х 

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

    cout « "iref = " « iref « '\п';        // Все в порядке 

    Вы также можете изменить значение переменной х: 

    х = 4321;        // Тоже годится 

    Поскольку iref — константа, то вы, конечно, не сможете присвоить новое 
значение х через ссылку: 

    iref = 4321;   // ??? Нельзя 

    Попытка скомпилировать последнее выражение приведет к выдаче сообщения об 
ошибке "Cannot modify a const object in function main()" (Нельзя изменить 
константный объект в функции mainO). 

    Ссылки в качестве параметров функций 

    Несмотря на интригующие свойства, сами по себе ссылочные переменные 
используются довольно редко. Вместо того чтобы использовать ссылку для доступа 
к другой переменной, легче использовать саму эту переменную. 
    Конечно, в качестве параметров функции ссылки имеют более широкое 
применение и предлагают полезную альтернативу доступа к параметрам. Ссылки 
особенно полезны в функциях, возвращающих несколько объектов, например два или 
более вводимых значения. Листинг 12.16 — измененная версия программы TAX. С из 
главы 5 — демонстрирует этот трюк. Скомпилируйте и запустите программу как 
Easy Win- или DOS-приложение, затем введите сумму платежей и налогов после их 
запроса. Программа выведет цену и сумму налога на введенные вами значения. 

    Листинг 12.16. ТАХ.СРР (использование ссылок в качестве параметров функции) 

    1: #include <iostream.h> 
    2: 
    3: #include <stdlib.h> 
    4: #include <stdio.h> 
    5; 
    6: double GetDouble(const char «prompt);             
    7: void GetData(double Spaid, double irate);   
    8: void Calculate(const double paid, const double rate, 
    9;  double &list, double &tax); 
    10: 
    11: main ()
    12: { 
    13:  double paid, rate, list, tax; 
    14:  GetData(paid, rate); 
    15:  Calculate(paid, rate, list, tax); 
    16:  printf('List pride = $%8.2f\n", list); 
    17:  printf("Tax paid = $%8.2f\n", tax); 
    18:  return 0; 
    19: } 
    20: 
    21: // Возвращает одно вещественное значение двойной точности 
    22: double GetDouble(const char «prompt) 
    23: { 
    24:  char s[20]; // Строка для ввода 
    25:  printf (prompt); // Отображение строки запроса 
    26:  scanf ("%20s", s); // Ввести данные как строку 
    27:  return atof(s); // Возвратить введенные данные 
    28:  } 
    

        Глава 12. Введение в C++     299 
