2014-05-18 14 views

Odpowiedz

10

Przydaje się zastąpienie długiego wyrażenia obiektem za pomocą krótszego odniesienia i uczynienie kodu bardziej czytelnym. Na przykład:

const int &SphereRadius = Configuration::getInstance()->sphere->radius; 

Po każdej zmianie konfiguracji (np. W innym wątku) odniesienie jest aktualizowane.

Przedstawiony kod jest po prostu prostą opcją większego narzędzia. Twój przykład w wielu przypadkach jest bez znaczenia, jak to rozumiałeś wcześniej. Głównym celem tego rodzaju odniesień jest aliasing obiektu.

  • Przekazywanie obiektów poprzez odniesienie do funkcji i możliwości modyfikacji obiektu odnosząc bez niejasności wskaźników.

  • Używanie ich w pętlach dystansowych do modyfikowania elementu iteracyjnego w kontenerze.

  • Skrócenie wyrażenia za pomocą prostszego w niektórych przypadkach. i więcej... .

5

Nie można powiązać non-const odwołanie do rvalue, czyli nie można „odnosi się” do czegoś, co nie może się pojawić po lewej stronie operatora przypisania (jak tymczasowy obiekt). Głównym powodem jest to, że gdy temperatura zostanie zniszczona, otrzymasz odwołanie, a C++ na to nie pozwala. Twój kod się nie skompiluje.

Funny chociaż można powiązać temp do const odniesienia, a to przedłuży żywotność Temp za, tj

const Foo& ref = Foo(); // creates a temporary Foo, destructor is not invoked now 

jednak tymczasowa nie jest zniszczona. Zobacz Does a const reference prolong the life of a temporary? Jednak nie użyłbym tego w moim kodzie, to jest po prostu źródłem nieładu dla większości z nas.

Powiązane problemy