• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Referencje - podstawowe pytania

Object Storage Arubacloud
+1 głos
276 wizyt
pytanie zadane 10 sierpnia 2018 w C i C++ przez Agnes Użytkownik (990 p.)

Nie wiem, czy dobrze rozumiem podstawowe aspekty referencji, proszę, aby ktoś skomentował, czy w tych dwóch "teoriach" są błędy i poprawił je, jeśli tak jest.

Dlaczego referencje nie mogę być zmieniane (Czy tak jest w każdym języku programowania?):

Nazwa referencji symbolizuje pewien adres w pamięci pod którym "siedzi" dany obiekt. Jeśli zmienimy nazwę referencji to ona nie będzie już symbolizować tego samego adresu tylko inny, w którym nie ma tego samego obiektu, dlatego gdyby takie działanie było dozwolone konsekwencje tego byłyby nieprzewidywalne.

A powód dla którego trzeba koniecznie inicjalizować referencję zaraz po deklaracji:

Deklarując referencję tworzymy odnośnik do pewnego miejsca w pamięci. Jeśli nie powiemy programowi jasno jaki obiekt ma zostać przypisany do tego adresu a następnie będziemy kontynuować pisanie programu wówczas w to miejsce zostanie wpisany kolejno utworzony obiekt (jeśli miejsca w pamięci są zapełniane jedno po drugim - jest tak?) lub pozostanie w nim obiekt, który wcześniej się na nim znajdował.

Przy okazji ciekawią mnie też odpowiedzi na pytania w nawiasach.

3 odpowiedzi

+1 głos
odpowiedź 15 sierpnia 2018 przez mokrowski Mędrzec (155,740 p.)
Oczywiście można strzępić sobie język że wskaźnik to zakamuflowany typ opcjonalny, udowadniać że referencję da się ustawić nieprawidłowo (bo da się), znęcać się nad R-Referencją. Może lepiej jednak przeczytać z uwagą:

https://en.cppreference.com/w/cpp/language/reference_initialization

oraz

https://en.cppreference.com/w/cpp/language/reference

To naprawdę wystarczy. Są przykłady wiszących referencji (ang. dangling reference), przekazywania referencji (również forward).
0 głosów
odpowiedź 10 sierpnia 2018 przez profesorek96 Szeryf (91,420 p.)
Zanim odpowiem ci na pytanie musze cię uświadomić, język C++ ma swoje kożenie w C. W jezyku C było coś takiego jak wskaźniki. Język C++ że jest kompatybilny wstecznie ma również mechanizm wskaźników. Jednak operacje na wskaźnikach nie są proste i prowadzą do błędów. Między innymi jeden wskaźnik można "przestawiać" by wskazywał na różne adresy co może powodować błędy. Dlatego właśnie wymyślono referencje by można było operować na pamięci ale by ta operacja była znacznie prostsza i trudniej było popełniać błędy.
0 głosów
odpowiedź 10 sierpnia 2018 przez Wiciorny Ekspert (270,910 p.)

Referencja jest praktycznie stałym wskaźnikiem (nie mylić ze wskaźnikiem do stałej wartości), tzn. nie da się zmienić miejsca w pamięci na który wskazuje, oraz nie może być nullem. Dodatkowo składnia jest identyczna jak posługiwanie się zmiennymi zaalokowanymi na stosie, co dodatkowo lepiej przekazuje intencję programisty. Przekazywanie argumentów funkcji przez referencję (z atrybutem const kiedy można) jest preferowanym sposobem przekazywania wszystkich obiektów, praktycznie umożliwia programowanie obiektowe. Dodatkowo wydaje mi się, że referencje pozwalają na więcej optymalizacji kompilatora niż wskaźniki (jak ktoś wie na ten temat coś więcej to proszę o wypowiedzenie się). 

wskaźniki to zmienne mogące trzymać adres, a referencja to adres do czegoś tam nie będący L-Wartością.

L* lewą wartością

 

jeśli miejsca w pamięci są zapełniane jedno po drugim

no są, ale to czy obiekt trafi jeden po drugim od tego nie zależy, bo to zależy od wielkości obiektu np... i tego ile pamięci zajmuje z obecnym stanem np.  

Podobne pytania

+1 głos
1 odpowiedź 175 wizyt
pytanie zadane 24 lutego 2019 w C i C++ przez Teslum_369 Gaduła (4,190 p.)
0 głosów
1 odpowiedź 931 wizyt
pytanie zadane 20 marca 2018 w C i C++ przez Sic Dyskutant (8,510 p.)
0 głosów
3 odpowiedzi 1,472 wizyt
pytanie zadane 11 stycznia 2018 w C i C++ przez kptpiotr Początkujący (330 p.)

92,631 zapytań

141,498 odpowiedzi

319,869 komentarzy

62,011 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...