Czy ktoś może wyjaśnić, dlaczego trzeba zwrócić referencję podczas przeciążania operatorów na przykład
friend std::ostream& operator<< (std::ostream& out, const std::string& str)
Odpowiedzi:
7 dla odpowiedzi № 1Chodzi o "łańcuchowanie" pracy operatora, na przykładach takich jak to:
std::cout << "hello," << " world";
Jeśli pierwsze (po lewej) użycie operator<<()
nie zwróciło referencji, nie byłoby obiektu, który by wymagał drugiego użycia operatora.
4 dla odpowiedzi nr 2
Jest to połączenie łańcuchowe operatora (jeśli zwróciszwskaźnik, musisz go usunąć) i nie zrobić potencjalnie ogromnej i kosztownej kopii obiektu (w przypadku, gdy zwrócisz wartość), jeśli jest to możliwe.
3 dla odpowiedzi nr 3
Ogólną zasadą, o której mówi Scott Meyers w Effective C ++, jest to, że w razie wątpliwości "rób jak ints
wykonaj ". Na przykład operator = powinien zwrócić referencję, aby kod działał tak:
MyClass A, B, C;
A = B = C = 0;