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:
Specifikátory deklarace:
- Volitelný specifikátor třídy úložiště.
- Volitelné
const
a/nebovolatile
kvalifikátory. - Specifikátor typu: název typu.
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/nebovolatile
qualifery.Identifikátor.
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 s
a odkaz na objekt lze SRef
použí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
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro