Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

01.12.2015, 17:49

[C++] r-value Referenzen

Bin grad dabei mein C++ Wissen mit C++11 aufzufrischen.
Hab ich das jetzt richtig verstanden, dass r-value Referenzen, also &&, genau das gleiche sind wie normale l-value Referenzen und lediglich dazu da sind, damit der Compiler unterscheiden kann, ob er entweder die eine Funktionsüberladung benutzt, welche eine r-referenz nimmt oder eine andere, welche eine l-referenz benutzt (aber sonst die komplett gleiche Signatur hat)?

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Roflo« (01.12.2015, 18:06)


dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

2

01.12.2015, 18:48

So in etwa; allerdings solltest du es eher umgekehrt betrachten: r-value Referenzen erlauben es dir, beim Schreiben einer Funktion, zu unterscheiden, wann ein Parameter ein temporärer Wert ist und wann nicht...

3

01.12.2015, 18:50

Ja irgendwie so hab ich mir das schon gedacht. Danke für die Bestätigung!

4

01.12.2015, 22:13

In der Regel willst du fast nie eine R-Value haben, außer du schreibst vllt. den Move-Konstruktor. Allerdings ist das nur meine Seite, wieder andere finden, dass man die Teile so oft wie möglich benutzen sollte. Es wird sicherlich noch seine Zeit dauern, bis wir als Community herausgefunden haben, wie man effizient so etwas benutzen kann und wann genau man es benutzen sollte. Um nochmal meinen Standpunkt zu zeigen, sind sie beispielsweise in for-Loops überwiegend richtig unnötig und "schädlich", weil man die constness aufgibt für... ja, wofür eigentlich? Weniger Tipperei? Es gibt aber wirklich nur richtig wenige Fälle, in denen for(auto&& a : vec) einem for(const auto& a : vec), durchaus auch zwanghaft, 'überwiegt'. Das ist Beispielsweise der Fall, wenn man einen std::vector<bool> so durchlaufen möchte, wegen der tollen Proxy-Klasse std::vector<bool>::reference... (das kompiliert dann ja erst, wenn man eine R-Value nimmt)
Ein äußerst nützliches Beispiel ist allerdings std::forward_as_tuple, welches ein std::tuple<Types&&...>(std::forward<Types>(args)...) zurückgibt. Dieses Tupel hat dann R-Value Referenzen als Member, wenn im Argument (von std::forward_as_tuple) entsprechend auch R-Values verwendet wurden, und sonst L-Value Referezen. Das ist beispielsweise super für variadische Argumente, die man dann einfach in so ein Tupel klatschen und später re-expanden kann.

MfG
Check

5

02.12.2015, 23:58

Ich hätte hier einen recht guten Artikel, der sehr viel Licht ins Dunkel bringt. Leider auf Englisch. http://thbecker.net/articles/rvalue_refe…section_08.html

Würde vllt auch auf Seite 1 anfangen^^...

Werbeanzeige