Zwraca odniesienie do prywatnego członka.
Istnieje wiele przypadków, w których jest to pożądane, ale należy zachować ostrożność.
IMO generalnie nie jest dobrym pomysłem zwracanie kopii obiektu wewnętrznego, który nie jest typem integralnym, z uwagi na ogólną wydajność. Tak, wiem, że przedwczesna optymalizacja nie jest dobra, ale to nie jest tak naprawdę optymalizacja, to tylko dobra praktyka wydajnościowa, która pozwala dzwoniącemu określić wpływ na wydajność; jeśli chce kopii, może po prostu nie zadeklarować zmiennej, do której przypisuje ją jako odniesienie.
Istnieją 2 Ogólne zasady kciuka używam tutaj:
1) Jeżeli nie chcesz, aby rozmówca mógł zmodyfikować prywatny obiekt bezpośrednio, zadeklarować wartość zwracaną jako const odniesienia:
inline const string& GetLabel() const{ return m_Label; }
2) Osoba dzwoniąca nigdy nie powinna przechowywać referencji zwróconej przez metodę klasy, powinna być używana lokalnie tylko wtedy, gdy obiekt nadrzędny jest w zasięgu.
Jeśli z jakiegoś powodu potrzebujesz rozmówców, aby móc przechowywać referencje do wewnętrznych obiektów, użyj zamiast tego inteligentnych wskaźników.
Rzeczywiście, prawdopodobnie chcesz _but_ wersji const i non const. – ildjarn
@ildjam To tylko częściowo prawda. Zwykle chcesz tylko podać wersję const, chyba że masz powód, aby pozwolić rozmówcom na modyfikowanie obiektu bezpośrednio. Jeśli udostępnisz wersję niestałą, powinieneś również podać wersję const, aby nadal można było uzyskiwać dostęp tylko do odczytu, w którym masz odwołanie do obiektu nadrzędnego. – Gerald
@Gerald: Przepraszam, powinienem wyjaśnić - chodzi mi o to, że jeśli chcesz mieć wersję niestałą, która zwraca referencję, to prawie na pewno chcesz również wersji Const. – ildjarn