Udostępnij za pośrednictwem


Odwołania (C++)

Odwołanie, takie jak wskaźnik, przechowuje adres obiektu znajdującego się w innym miejscu w pamięci. W przeciwieństwie do wskaźnika odwołanie po zainicjowaniu nie może być wykonane w celu odwoływania się do innego obiektu lub ustawiania wartości null. Istnieją dwa rodzaje odwołań: odwołania lvalue, które odnoszą się do nazwanej zmiennej i odwołań rvalue, które odwołują się do obiektu tymczasowego. Operator & oznacza odwołanie lvalue, a && operator oznacza odwołanie rvalue lub odwołanie uniwersalne (rvalue lub lvalue) w zależności od kontekstu.

Odwołania mogą być deklarowane przy użyciu następującej składni:

[storage-class-specifiers] [cv-kwalifikatory] specyfikatory typów [ms-modifier] deklarator [=expression];

Można użyć dowolnego prawidłowego deklaratora określającego odwołanie. Jeśli odwołanie nie jest odwołaniem do funkcji lub typu tablicy, stosowana jest następująca uproszczona składnia:

[storage-class-specifiers] [cv-kwalifikatory] specyfikatory typów [& lub &&] [cv-kwalifikatory] identyfikator [=wyrażenie];

Odwołania są deklarowane przy użyciu następującej sekwencji:

  1. Specyfikatory deklaracji:

    • Opcjonalny specyfikator klasy magazynu.
    • Opcjonalne const i/lub volatile kwalifikatory.
    • Specyfikator typu: nazwa typu.
  2. Deklarator:

    • Opcjonalny modyfikator specyficzny dla firmy Microsoft. Aby uzyskać więcej informacji, zobacz Modyfikatory specyficzne dla firmy Microsoft.

    • & Operator lub && operator.

    • Opcjonalne const i/lub volatile qualifers.

    • Identyfikator.

  3. Opcjonalny inicjator.

Bardziej złożone formularze deklaratora dla wskaźników do tablic i funkcji dotyczą również odwołań do tablic i funkcji. Aby uzyskać więcej informacji, zobacz wskaźniki.

Wiele deklaratorów i inicjatorów może pojawić się na liście rozdzielanej przecinkami po specyfikatorze pojedynczej deklaracji. Na przykład:

int &i;
int &i, &j;

Odwołania, wskaźniki i obiekty mogą być deklarowane razem:

int &ref, *ptr, k;

Odwołanie zawiera adres obiektu, ale zachowuje się składniowo jak obiekt.

W poniższym programie zwróć uwagę, że nazwa obiektu , si odwołanie do obiektu SRef, może być używane identycznie w programach:

Przykład

// 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

Zobacz też

Argumenty funkcji będące odwołaniami
Wartości zwracane przez funkcje będące odwołaniami
Odwołania do wskaźników