Sytuacja C++
czy const &a == a?
Dziękuję za odpowiedz.
Co to znaczy?
1)
int a = 0;
const int &ra = a;
a == ra;
int a = 0;
const int &ra = a;
typ(a) == typ(ra);
O którą z wersji Ci chodzi?
Przekazuje jako argument do funkcji dajmy na to funkcja zwie się f():
f(int a);
f(const int &a);
Moje pytanie brzmi: czy w tym przypadku istnieje różnica miedzy przekazaniem wartości do funkcji a przekazaniem stałej referencji... Jaka jest różnica?
Ps. Dla wskaźników rozumiem idee zapisu typu f(const int *a), tutaj mam stałą wartosc jednak możliwość zmiany adresu pod a, ma to jakiś sens ale dla referencji średnio rozumiem zapis (const int &a). Dziękuję za odpowiedz.
Referencja jest abstrakcją na wskaźniki, jakby aliasem na nazwę obiektu. Przekazując parametr jako const int &a
widzisz oryginalny obiekt, ale nie mozesz go modyfikowac. Przekazujac natomiast jako int
, w funkcji dostajesz skopiowany obiekt.
Konkretnie dla int
i innych małych (w sensie zajętości pamięci) obiektów nie ma sensu robić tego przez const &
.
Nie. Tak jak napisałem, kopiowanie małych obiektów (jak int
) jest równie efektywne.
Nie do końca. Przekazywanie przez kopię jest wydajniejsze dla małych obiektów - kompilator ma pewność, że wywołana funkcja nie skorzysta z const_cast
więc może nie wczytywać wielokrotnie tej samej zmiennej i zastosować inne optymalizacje. Polecam wykłady Chandlera Carrutha na ten temat. (to chyba ten:
)
Przykład wygenerowanego innego kodu: https://godbolt.org/g/sYdtLF
Dziękuję za odpowiedz. Myślę ze na poziomie abstrakcji na jakim jestem te odpowiedzi mi wystarczają, doczytam na temat const_cast
. Dzięki
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.