R Справочное руководство по С++

R.8.2.2 Ссылки.

   


Назад  |  Вперёд

В описании T D, в котором D имеет вид

           & список-спецификаций-cv opt D1

тип описываемого идентификатора есть "...список-спецификаций-cv ссылка на T". Тип void& недопустим.

Например, во фрагменте

           void f(double& a) { a += 3.14; }
           // ...
              double d = 0;
              f(d);

a описывается как параметр, являющийся ссылкой, поэтому вызов f(d) приведет к увеличению d на 3.14. Во фрагменте

           int v[20];
           // ...
           int& g(int i) { return v[i]; }
           // ...
           g(3) = 7;

описывается: функция g() возвращает ссылку на целое; поэтому оператор g() = 7; присвоит 7 четвертому элементу массива v. Рассмотрим следующий программный фрагмент:

           struct link {
              link* next;
           };
           link* first;

           void h(link*& p)  // `p' ссылка на указатель
           {
             p->next = first;
             first = p;
             p = 0;
           }

           void k()
           {
             link* q = new link;
             h(q);
           }

Здесь p описано как ссылка на указатель на link, поэтому вызов h(q) не изменит значение q, равное 0, см. также $$R.8.4.3.

Недопустимы ссылки на ссылки, ссылки на битовые поля ($$R.9.6), массивы ссылок и указатели на ссылки. Описание ссылки должно содержать инициализатор ($$R.8.4.3), за исключением тех случаев, когда описание содержит явную спецификацию extern ($$R.7.1.1), или является описанием члена класса ($$R.9.2) при описании самого класса, или является описанием параметра или возвращаемого типа ($$R.8.2.5), см. также $$R.3.1.


Назад  |  Вперёд


OtDiatlovaOU
К началу книги

Оформление и дизайн книги OtDiatlovaOU.
Вся книга, архив.