Sytuacja C++
czy const &a == a?
Dziękuję za odpowiedz.
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 &.
a nie jest tak, że jak przesyłamy stałą referencję, to program wykona się trochę szybciej, bo nie zostanie uruchomiony konstruktor kopiujący?
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