Ссылки (C++)

Ссылки могут объявляться с помощью следующего синтаксиса.

[storage-class-specifiers] [cv-qualifiers] type-specifiers 
[ms-modifier] declarator [= expression];

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

[storage-class-specifiers] [cv-qualifiers] type-specifiers & 
[cv-qualifiers] identifier [= expression];

Ссылки объявляются с использованием следующей последовательности.

1. Спецификаторы объявления:

  • Необязательный спецификатор класса хранения.

  • Необязательные квалификаторы const и(или) volatile.

  • Спецификатор типа: имя типа.

  • 2. Декларатор:

  • Необязательный модификатор, используемый в системах Microsoft. Дополнительные сведения см. в разделе Модификаторы, используемые в системах Microsoft.

  • Оператор &.

  • Необязательные квалификаторы const и(или) volatile.

  • Идентификатор.

3. Необязательный инициализатор.

Более сложные формы декларатора для указателей на массивы и функции также применяются к ссылкам на массивы и функции, см. разделы указатели и деклараторы.

Несколько деклараторов и инициализаторов могут отображаться в разделенном запятыми списке после отдельного спецификатора объявления. Например:

int &i; 
int &i, &j; 

Ссылки, указатели и объекты могут быть объявлены вместе.

int &ref, *ptr, k; 

Ссылка содержит адрес объекта, однако с синтаксической точки зрения ведет себя как объект.

В следующей программе обратите внимание, что имя объекта, Today и ссылка на объект, TodayRef, могут использоваться идентично в следующих программах.

Пример

// references.cpp
#include <stdio.h>
struct S {
   short i;
};

int main() {
   S  s;   // Declare the object.
   S& SRef = s;   // Declare the reference.
   s.i = 3;

   printf_s("%d\n", s.i);
   printf_s("%d\n", SRef.i);

   SRef.i = 4;
   printf_s("%d\n", s.i);
   printf_s("%d\n", SRef.i);
}
  

Комментарий

Подразделы в этом разделе:

См. также

Ссылки

Инициализация ссылок