Przebijam się przez Opus Magnum C++, książka Pana Jerzego Grębosza jest bardzo fajna ale potrafi zamotać próbami łatwych wyjaśnień.
Temat: funkcja zwracająca rezultat będący referencją l-wartością zostawił u mnie niedosyt.
Przepisałem przykład z książki i po części rozumiem.
#include <iostream>
using namespace std;
int globalny_jedynkowy = 25;
int globalny_inny = 77;
int f_wartosc(int ktory)
{
int lokalny = 4;
if (ktory == 1) return globalny_jedynkowy;
else return globalny_inny;
}
int & f_ref_lwartosci(int ktory)
{
int lokalny = 4;
if (ktory == 1) return globalny_jedynkowy;
else return globalny_inny;
}
void wypisz(string txt, int a)
{
cout << txt;
if(a) cout << a << ", ";
cout << "globalny_jedynkowy = " << globalny_jedynkowy << ", globalny_inny = " << globalny_inny << endl;
}
int main()
{
int n{0};
n = f_wartosc(1);
wypisz("f_wartosc(1) = ", n); // 25
n = f_wartosc(6);
wypisz("f_wartosc(6) = ", n); // 77
cout << "\n";
n = f_ref_lwartosci(1);
wypisz("f_ref_lwartosci(1) = ", n); // 25
n = f_ref_lwartosci(6);
wypisz("f_ref_lwartosci(6) = ", n); // 77
cout << "\n";
n = f_ref_lwartosci(1) = 5000;
wypisz("f_ref_lwartosci(1) ", 0);
n = f_ref_lwartosci(6) = 8000;
wypisz("f_ref_lwartosci(6) ", 0);
}
Nie potrafię jednak pojąć użyteczności tego aspektu użycia funkcji. Nie udało mi wymyśleć niczego praktycznego. Myślałem o równaniach drugiego stopnia, o programie, który szukałby pierwiastków (x1, x2) ale to chyba nie do tego.
Jaką wartość mogą mieć dla mnie te koncepcje języka C++ ? Nie spotkałem się z czymś podobnym w Javie, Pythonie czy JavaScript.