TEMAT DO ZAMKNIĘCIA NIEBAWEM - ZANIM ODPOWIESZ NA PYTANIE ZOBACZ NA KOMENTARZE:
Witam, zaznaczę że ogólnie rozumiem funkcje zwracające alias (referencję) i ich zastosowanie. Tu mam jednak pytanie dotyczące bardziej wewnętrznej strony...
Mamy taką funkcje:
int f(int a);
Zwraca ona np. zmienną 'a' jej przekazaną.
Oraz taką:
int& f2(int& a);
Robi to samo ale zwraca referencję na a. Jednym z wielu korzyści i konsekwencji użycia funkcji f2() jest to że działa ona szybciej od f() (niezauważalnie oczywiście dla człowieka).
Tzn funkcja f() zwraca 'a' czyli umieszcza tą wartość w rejestrze (kopiuje ją) a to zabiera czas.
Potem gdy napiszemy:
int a = 8;
int x = f(a);
To wartość z rejestru jest dodatkowo kopiowana do zmiennej x.
W tym przypadku natomiast:
int a = 8;
int x = f2(a);
Wykona się to szybciej bo kopiujemy to co zwraca funkcja f2() bezpośrednio do zmiennej 'x', czyli wcześniej nie kopiuje zwracanej wartości do rejestru co kosztuje czas. ( f2() to jakby w tym momencie alias dla 'a'). Tak pisze w książce z której się uczę (to dałem inny prostszy przykład banalnych funkcji by pokazać o co mi chodzi). Tu jest coś dla mnie niejasnego... Jak to możliwe że funkcja zwracająca wartość (alias to chyba też jakaś wartość) nie umieszcza jej w rejestrze? Myślałem że te zasady tyczą się wszystkich funkcji. Kiedy funkcja zwraca referencję to jak jest wewnętrzne obsługiwana zwracana wartość?
A co w przypadku funkcji zwracających wskaźnik? Czy też zyskujemy coś na czasie? Wiem oczywiście że zyskujemy w przypadku zwracania dużych struktur, jest szybciej kiedy zwracamy wskaźnik lub referencję na nie. Mi jednak chodzi o zwykłe zmienne.
Dziękuje serdecznie za pomoc w zrozumieniu tego ;)