Szukaj…


Definiowanie referencji

Odnośniki zachowują się podobnie, ale nie całkowicie jak stałe wskaźniki. Odwołanie jest definiowane przez dodanie ampersand & do nazwy typu.

int i = 10;
int &refi = i;

Tutaj refi jest odniesieniem związanym z i .
Odwołania wyodrębniają semantykę wskaźników, zachowując się jak alias do podstawowego obiektu:

refi = 20; // i = 20;

Możesz także zdefiniować wiele odniesień w jednej definicji:

int i = 10, j = 20;
int &refi = i, &refj = j;

// Common pitfall :
// int& refi = i, k = j;
// refi will be of type int&.
// though, k will be of type int, not int&!

Odwołania muszą być poprawnie zainicjowane w momencie definiowania i nie mogą być później modyfikowane. Poniższy kod powoduje błąd kompilacji:

int &i; // error: declaration of reference variable 'i' requires an initializer

Nie można również bezpośrednio powiązać odwołania do nullptr , w przeciwieństwie do wskaźników:

int *const ptri = nullptr;
int &refi = nullptr; // error: non-const lvalue reference to type 'int' cannot bind to a temporary of type 'nullptr_t'

Odnośniki C ++ to Alias istniejących zmiennych

Odwołanie w C ++ jest tylko Alias lub inną nazwą zmiennej. Podobnie jak większość z nas może zostać skierowana przy użyciu naszej nazwy paszportowej i pseudonimu.

Referencje nie istnieją dosłownie i nie zajmują żadnej pamięci. Jeśli wydrukujemy adres zmiennej referencyjnej, wydrukuje ten sam adres co zmienna, do której się odnosi.

int main() {
    int i = 10;
    int &j = i;
    
    cout<<&i<<endl;
    cout<<&b<<endl;
    return 0;
}

W powyższym przykładzie oba cout wydrukują ten sam adres. Sytuacja będzie taka sama, jeśli weźmiemy zmienną jako odwołanie w funkcji

void func (int &fParam ) {
   cout<<"Address inside function => "<<fParam<<endl;
}

int main() {
    int i = 10;
    cout<<"Address inside Main => "<<&i<<endl;    

    func(i);

    return 0;
}

W tym przykładzie oba cout wydrukują ten sam adres.

Jak już wiemy, odniesienia do C++ References są po prostu aliasami, a do utworzenia aliasu potrzebujemy czegoś, do czego Alias może się odnosić.

To jest dokładnie powód, dla którego taka instrukcja wygeneruje błąd kompilatora

int &i;

Ponieważ alias nie odnosi się do niczego.



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow