Ссылки (C++)
В ссылке, как и в указателе, хранится адрес объекта, расположенного в другой области памяти. В отличие от указателя, ссылка после инициализации не может быть сделана, чтобы ссылаться на другой объект или задать значение NULL. Существует два типа ссылок: ссылки lvalue , которые ссылаются на именованную переменную и ссылки rvalue , которые ссылаются на временный объект. Оператор &
обозначает ссылку lvalue, а &&
оператор обозначает либо ссылку rvalue, либо универсальную ссылку (rvalue или lvalue) в зависимости от контекста.
Ссылки могут объявляться с помощью следующего синтаксиса.
[описатель класса хранилища] [cv-qualifiers] type-specifiers [ms-modifier] декларатор [
=
выражение];
Можно использовать любой допустимый декларатор, задающий ссылку. Следующий упрощенный синтаксис применяется всегда, кроме случаев, когда ссылка является ссылкой на функцию или тип массива.
[описатель класса хранилища] [cv-qualifiers] тип-описатели [
&
или&&
] [cv-qualifiers] идентификатор [=
выражение];
Ссылки объявляются с использованием следующей последовательности.
Спецификаторы объявления:
- Необязательный спецификатор класса хранения.
- Необязательные
const
и/илиvolatile
квалификаторы. - Спецификатор типа: имя типа.
Декларатор:
Необязательный модификатор, используемый в системах Microsoft. Дополнительные сведения см. в разделе "Модификаторы для конкретного майкрософт".
Оператор
&
или&&
оператор.Необязательные
const
и(или)volatile
квалифы.Идентификатор.
Необязательный инициализатор.
Более сложные формы декларатора для указателей на массивы и функции также применяются к ссылкам на массивы и функции. Дополнительные сведения см . в указателях.
Несколько деклараторов и инициализаторов могут отображаться в разделенном запятыми списке после отдельного спецификатора объявления. Например:
int &i;
int &i, &j;
Ссылки, указатели и объекты могут быть объявлены вместе:
int &ref, *ptr, k;
Ссылка содержит адрес объекта, однако с синтаксической точки зрения ведет себя как объект.
В следующей программе обратите внимание, что имя объекта, s
и ссылка на объект, SRef
, могут использоваться идентично в следующих программах.
Пример
// references.cpp
#include <stdio.h>
struct S {
short i;
};
int main() {
S s; // Declare the object.
S& SRef = s; // Declare and initialize 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);
}
3
3
4
4
См. также
Аргументы функции ссылочного типа
Возвращаемые значения функции ссылочного типа
Ссылки на указатели
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по