zwracanie const referencji

0

Cześć, mam pytanie czy jest sens zwracania a jeśli tak to w jakiej sytuacji (do czego może się to przydać) const referencji?
Chodzi mi o taką funkcję/metodę:

const double& funkcja_zwracajaca_const_ref(...);

Osobiście myślę nad szybszym wykonaniem kodu (unikanie zwracania przez wartość) przy jednoczesnym zabezpieczeniu, by nikt nie zmienił zwracanego obiektu - jednak mam tu pewne wątpliwości czy to ma sens...
pozdrawiam

0

Do czego referencje chcesz zwrócić? To coś musi istnieć po zakończeniu wykonywania funkcji. Albo będzie to zmienna statyczna wewnątrz funkcji, albo zmienna składowa klasy. No może być jeszcze globalna, ale to ma mniejszy sens.

Dla typów wbudowanych nie ma to najmniejszego sensu. Nigdy tego nie rób.

Dla innych typów prawdopodobnie też nie ma - po to jest RVO oraz move semantics w C++11.

0
Endrju napisał(a):

Do czego referencje chcesz zwrócić? To coś musi istnieć po zakończeniu wykonywania funkcji. Albo będzie to zmienna statyczna wewnątrz funkcji, albo zmienna składowa klasy. No może być jeszcze globalna, ale to ma mniejszy sens.

Dla typów wbudowanych nie ma to najmniejszego sensu. Nigdy tego nie rób.

Dla innych typów prawdopodobnie też nie ma - po to jest RVO oraz move semantics w C++11.

Wynik tej funkcji chcę przypisać do innej zmiennej w innej klasie -> dokładniej do zmiennej typu double. Dlatego, że funkcja jest wykonywana bardzo często zależy mi na każdej możliwej optymalizacji kodu ;-).
Reasumując jest to coś analogicznego do poniższego kodu:

class klasa
{
public:
double x;
const double& fun(){return x;}
};
//...
klasa* obiekt; //tablica obiektów typu klasa
double* tablica; //wskaźnik do tablicy double;
//...
tablica[i] = klasa[i].fun();

Jak wstępnie testowałem to wszystko wykonuje się prawidłowo i wygląda, że jest ok.

0
WMich napisał(a):

Wynik tej funkcji chcę przypisać do innej zmiennej w innej klasie -> dokładniej do zmiennej typu double. Dlatego, że funkcja jest wykonywana bardzo często zależy mi na każdej możliwej optymalizacji kodu ;-).
Reasumując jest to coś analogicznego do poniższego kodu:

(...)

Jak wstępnie testowałem to wszystko wykonuje się prawidłowo i wygląda, że jest ok.

Kompilator prawdopodobnie oleje tę referencję i zrobi to tak, jakby było normalne zwracanie przez wartość. Jeżeli nie - tylko na tym stracisz. Tak czy siak kod jest niepotrzebnie zaciemniony i żadna to optymalizacja.

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