Mam wrażenie, że to pytanie jest wystarczająco podstawowe, aby gdzieś tam być, ale nie mogę znaleźć odpowiedzi na to pytanie.Deklaracja odniesienia do obiektu i operatora przypisania
Załóżmy, że mam tego kodu:
//class member function
std::map< std::string, std::string > myMap;
const std::map< std::string, std::string >& bar()
{
return myMap;
}
void myFunc(std::map< std::string, std::string >& foo1)
{
foo1 = bar();
std::map< std::string, std::string >& foo2 = bar();
}
Moje zrozumienie jest, że jeśli zacznę za pomocą foo2, ponieważ foo2 jest nawiązaniem do tej samej instancji jak to, co bar() zwraca, coś zrobić z foo2 będzie odzwierciedlone w myMap. Ale co z foo1? Czy foo1 otrzymuje kopię myMap, czy też wskazuje na to samo wystąpienie, co funkcja zwracana przez bar()? Biblioteka standardowa C++ mówi, że operator przypisania dla std :: map skopiuje elementy, ale czy to oznacza, że operator przypisania nie jest tak naprawdę wywoływany w deklaracji foo2?
Dzięki!
+1 Dziękuję, sam nauczyłem się czegoś nowego. Właśnie zrobiłem test i naprawdę byłem absolutnie w 100% NIEPRAWIDŁOWY i masz rację = -) – flumpb
Dobrze! Dzięki, naprawdę musiałem wiedzieć, że operator przypisania jest wywoływany w foo1 i nie jest wywoływany w foo2. Świetne wyjaśnienie, dzięki! – bhh1988
@Luc Jeśli to możliwe, czy możesz wyjaśnić, dlaczego zwykle nie używasz zmiennych referencyjnych?Mam lepsze zrozumienie tego, czym one są (dzięki twojej odpowiedzi), ale wygląda na to, że koderowie zazwyczaj faworyzują wskaźniki. Czy to jest redundancja? Ograniczony zakres? –