funkcja, która zwraca referencję

0

Cześć,
mam ogromną prośbę: czy mógłby mi ktoś podać jakiś sensowny przykład funkcji, która zwracałaby referencję oraz napisać czym różni się zwracanie referencji od wskaźnika w C++?
Tak jak jestem znaleźć sens zwracania wskaźników tak z referencjami jakoś mi nie idzie...
Z góry dziękuję za pomoc w wyjaśnieniu tych kwestii!

0

Przykład z życia wzięty: operator<< oraz operator>> zwracają referencje do ostream / istream żebyś mógł kaskadowo robić

cout << 1 << 2 <<3;

Gdyby operator<< nie zwracał tej referencji to nie mógł być tak zrobić.

0

Dzięki Shalom, ale bardziej mi chodziło o tradycyjną funkcję typu:

double& funkcja(...)
{
...
return(referencja)
}

Czy dla takich tradycyjnych funkcji jest jakieś praktyczne zastosowanie? Przeładowanie operatora to dość specyficzny przykład.

0

No jeśli jako argument dostałeś do funkcji referencje do jakiegoś obiektu to możesz też ten obiekt zwrócić przez referencje żeby uniknąć jego kopiowania.
W praktyce to się może przydać raczej jak masz obiekt jakiejs klasy i chcesz zwrócic referencje do oryginalnego pola tego obiektu.

0
Shalom napisał(a):

No jeśli jako argument dostałeś do funkcji referencje do jakiegoś obiektu to możesz też ten obiekt zwrócić przez referencje żeby uniknąć jego kopiowania.
W praktyce to się może przydać raczej jak masz obiekt jakiejs klasy i chcesz zwrócic referencje do oryginalnego pola tego obiektu.

Czyli dobrze rozumiem, że taka funkcja:

double& kwadrat(double& x) //przyjmuje referencję
{
x = x*x;
return (x); zwraca referencję
}
wykona się szybciej, niż:
double kwadrat(double& x) //przyjmuje referencję
{
x = x*x;
return(x); //zwraca zwykłą zmienną?
}

?
Wydawało mi się, że kopia powstaje w momencie przekazywania zmiennych jako argument do funkcji, a nie w miejscu, gdzie funkcja zwraca wynik...

0

Kopia powstaje w obu przypadkach (argument, zwracanie). Drugi przypadek zwraca raczej wartość, nie zmienną.

0

Powiem szczerze, że trochę tego nie rozumiem :(
No ale nic, dziękuję za dobre chęci! ;-)

0

Zawsze jeśli zwracasz coś z funkcji lub przekazujesz jako argument nie przez referencje i nie przez wskaźnik to następuje kopiowanie. Zawsze.

1 użytkowników online, w tym zalogowanych: 0, gości: 1