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

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.