Декларатор ссылки Lvalue: &

Содержит адрес объекта, но синтаксически ведет себя подобно объекту.

Синтаксис

lvalue-reference-type-id:
type-specifier-seq&attribute-specifier-seqoptptr-abstract-declaratoropt

Замечания

Ссылку lvalue можно считать другим именем для объекта. Объявление ссылки lvalue состоит из необязательного списка спецификаторов, за которым следует декларатор ссылки. Ссылка должна быть инициализирована и не может быть изменена.

Любой объект, адрес которого можно преобразовать в некоторый тип указателя, можно также преобразовать в аналогичный ссылочный тип. Например, любой объект, адрес которого можно преобразовать в тип char *, можно также преобразовать в тип char &.

Не путайте объявления ссылок с использованием оператора address-of. Если идентификатор &предшествует типу, например int или char, идентификатор объявляется в качестве ссылки на тип. Если &идентификатор не предшествует типу, использование — адрес оператора.

Пример

В следующем примере демонстрируется декларатор ссылки путем объявления объекта Person и ссылки на этот объект. Поскольку rFriend является ссылкой на myFriend, при обновлении любой из этих переменных изменяется один и тот же объект.

// reference_declarator.cpp
// compile with: /EHsc
// Demonstrates the reference declarator.
#include <iostream>
using namespace std;

struct Person
{
    char* Name;
    short Age;
};

int main()
{
   // Declare a Person object.
   Person myFriend;

   // Declare a reference to the Person object.
   Person& rFriend = myFriend;

   // Set the fields of the Person object.
   // Updating either variable changes the same object.
   myFriend.Name = "Bill";
   rFriend.Age = 40;

   // Print the fields of the Person object to the console.
   cout << rFriend.Name << " is " << myFriend.Age << endl;
}
Bill is 40

См. также

Ссылки
Аргументы функции ссылочного типа
Функция ссылочного типа возвращается
Ссылки на указатели