Reference
C++ 11

image_printTisk

V tomto článku si vysvětlíme nový prvek jazyka C++, a to jsou reference. Jejich funkce je obdobná jako u ukazatelů, jsou tu avšak určité rozdíly, které je třeba mít na paměti.

Jak již bylo zmíněno, použití referencí je velmi podobné použití ukazatelů, tedy uchovávání odkazu na nějakou proměnnou či oblast paměti. To se děje interně uložením adresy odkazované proměnné do reference. Když trochu předběhneme výklad tématu, reference se například používají k předávání argumentů odkazem do funkcí nebo slouží k jejich vracení, rovněž odkazem.

Nyní ale přistupme k ukázce, jak vypadá vůbec zavedení reference do programového kódu pomocí deklarace.

int number = 5;
int& numberRef = number;

Příklad začíná deklarací celočíselné proměnné typu int se jménem number, která je inicializována na hodnotu 5. Pak následuje deklarace reference. Začátek této deklarace je datový typ odkazované proměnné, což v našem případě je int. Za uvedením datového typu následuje znak “ampersand”. Po něm je uveden již identifikátor a v inicializaci za přiřazovacím operátorem následuje název proměnné, jejíž adresu má reference uchovávat.

Bylo již zmíněno, že funkce ukazatelů a referencí je podobná. Jsou zde ale podstatné rozdíly:

  • Ukazatel může být inicializován na hodnotu NULL znamenající, že neukazuje “nikam”. Naopak reference, na rozdíl od ukazatelů, musí mít vždy nějakou platnou hodnotu.
  • U ukazatele v deklaraci může být vynechána inicializační část, avšak reference musí inicializaci obsahovat vždy.
  • Hodnotu ukazatele lze v průběhu běhu programu změnit, ale reference, jakmile je jednou inicializovaná, neumožňuje změnit adresu odkazované proměnné.

Uveďme si nyní finální příklad, který demonstruje identické chování referencí a jejich odkazovaných proměnných při operacích s hodnotami.

#include <iostream>
using namespace std;

int number = 10;
int& numberRef = number;

void print() {
    cout << "Hodnota z proměnné number je " << number << endl;
    cout << "Hodnota získaná z reference je " << numberRef << endl;
    cout << endl;
}

int main() {
    print();
    number = 5;
    print();
    numberRef = 1;
    print();
    return 0;
}
Unable to connect to the JDoodle service.

Shrnutí:

  • Funkce referencí je velmi podobná funkci ukazatelů, tedy uchovávání odkazu na nějakou proměnnou.
  • Na rozdíl od ukazatelů reference musí mít vždy pouze jednu platnou hodnotu.
  • Reference je deklarována vždy pro specifický datový typ, za jehož uvedením v její deklaraci následuje znak “ampersand”.
image_printTisk
Reference
C++ 11
Ohodnoťte tento článek

Související články

  • Funkce a její parametry V tomto článku si blíže vysvětlíme pojem funkce v C++, seznámíme se s jejím syntaktickým zápisem včetně zápisu formálních parametrů a dále bude vysvětleno, jak se z funkcí provádí vracení […]
  • Chytré ukazatele Často potřebujeme alokovat, či jinak řečeno si rezervovat, paměť na dynamické části paměti, jelikož neznáme potřebnou délku v době kompilace programu, ale až za jeho běhu. Například […]
  • Metody předávání hodnot argumentů funkcím Tento článek pojednává o způsobech či metodách, jak lze předávat hodnoty argumentů volaným funkcím. V zásadě existují dva přístupy. Prvním je předání hodnotou, druhým je předání […]
  • Seznamy hodnot podrobněji V tomto článku se blíže seznámíme se seznamy hodnot. Máme na výběr dva typy seznamů. Seznam s pevným počtem položek nebo seznam s proměnlivým počtem položek. Seznam s pevným počtem […]
  • Metody vracení hodnot z funkce DO POKROČILÝCH ASI Tento článek pojednává o způsobech vracení hodnot z funkcí. Jsou to stejné způsoby, o kterých je psáno ve článku předchozím, tedy vracení hodnotou nebo vracení […]
  • Lambda funkce Tento článek popisuje nový syntaktický zápis funkcí a různých operací. Tento zápis se nazývá lambda funkce nebo lambda výrazy a je primárně určen pro předávání operací jako argument do […]