Sdílet prostřednictvím


Odkazy (C++)

Odkaz, například ukazatel, ukládá adresu objektu umístěného jinde v paměti. Na rozdíl od ukazatele nelze po inicializaci odkazovat na jiný objekt nebo nastavit hodnotu null. Existují dva druhy odkazů: odkazy lvalue , které odkazují na pojmenovanou proměnnou a odkazy rvalue , které odkazují na dočasný objekt. Operátor & označuje odkaz lvalue a && operátor označuje buď odkaz rvalue, nebo univerzální odkaz (rvalue nebo lvalue) v závislosti na kontextu.

Odkazy mohou být deklarovány pomocí následující syntaxe:

[specifikátory třídy úložiště] [cv-kvalifikátory] specifikátory typu [ms-modifier] deklarátor [= výraz];

Lze použít jakýkoli platný deklarátor určující odkaz. Pokud odkaz není odkazem na typ funkce nebo pole, platí následující zjednodušená syntaxe:

[specifikátory třídy úložiště] [cv-kvalifikátory] specifikátory typu [& nebo &&] [cv-kvalifikátory] identifikátor [= výraz] ;

Odkazy se deklarují pomocí následující sekvence:

  1. Specifikátory deklarace:

    • Volitelný specifikátor třídy úložiště.
    • Volitelné const a/nebo volatile kvalifikátory.
    • Specifikátor typu: název typu.
  2. Deklarátor:

    • Volitelný modifikátor specifický pro Microsoft. Další informace naleznete v tématu Modifikátory specifické pro Microsoft.

    • Operátor & nebo && operátor.

    • Volitelné const a/nebo volatile qualifery.

    • Identifikátor.

  3. Volitelný inicializátor.

Složitější formuláře deklarátoru pro ukazatele na pole a funkce platí také pro odkazy na pole a funkce. Další informace najdete v tématu ukazatele.

Několik deklarátorů a inicializátorů se může objevit v seznamu odděleném čárkami za jediným specifikátorem deklarace. Příklad:

int &i;
int &i, &j;

Odkazy, ukazatele a objekty mohou být deklarovány společně:

int &ref, *ptr, k;

Odkaz obsahuje adresu objektu, ale chová se syntakticky jako objekt.

V následujícím programu si všimněte, že název objektu sa odkaz na objekt lze SRefpoužít identicky v programech:

Příklad

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

Viz také

Argumenty funkce typu odkazu
Funkce vracející typ odkazu
Odkazy na ukazatele