C++
Bibliografia
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.