Modyfikator const

0

Sytuacja C++

czy const &a == a?

Dziękuję za odpowiedz.

1

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?

0

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.

2

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 &.

0

a nie jest tak, że jak przesyłamy stałą referencję, to program wykona się trochę szybciej, bo nie zostanie uruchomiony konstruktor kopiujący?

1

Nie. Tak jak napisałem, kopiowanie małych obiektów (jak int) jest równie efektywne.

2

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

0

Dziękuję za odpowiedz. Myślę ze na poziomie abstrakcji na jakim jestem te odpowiedzi mi wystarczają, doczytam na temat const_cast. Dzięki

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