Ссылки (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);
}
Комментарий
Подразделы в этом разделе: