C ++ Doppeladressenoperator? (& amp; & amp; amp;)
Bin ich beim Lesen von STL-source-code und ich habe keine Ahnung, was &&
Adresse Bediener machen soll. Hier ist ein code Beispiel aus stl_vector.h
:
vector&
operator=(vector&& __x) //<-- Note double ampersands here
{
//NB: DR 675.
this->clear();
this->swap(__x);
return *this;
}
Bedeutet "Adresse von Adresse" irgendeinen Sinn? Warum hat es zwei Adresse, die Betreiber, anstatt nur einer?
InformationsquelleAutor der Frage Anarki | 2010-12-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist C++11 code. In C++11, die
&&
token kann verwendet werden, bedeuten eine "rvalue-Referenz".InformationsquelleAutor der Antwort aschepler
&&
ist neu in C++11, und es bedeutet, dass die Funktion akzeptiert eine RValue-Referenz -, eine Referenz auf ein argument, das dabei zerstört werden.InformationsquelleAutor der Antwort Billy ONeal
&&
ist neu in C++11.int&& a
bedeutet "a" ist ein r-Wert-Referenz.&&
ist in der Regel nur verwendet, um einen parameter zu deklarieren einer Funktion. Und es nur nimmt einen r-Wert-Ausdruck. Wenn Sie nicht wissen, was ein r-Wert ist, die einfache Erklärung ist, dass es nicht eine Speicheradresse. E. g. die Zahl 6, und die Zeichen 'v' sind beide r-Werte.int a
ist a ein l-Wert, jedoch(a+2)
ist ein r-Wert. Zum Beispiel:Hoffe das ist informativ.
InformationsquelleAutor der Antwort Lexseal Lin
Anderen Antworten erwähnt haben, die
&&
token in diesem Zusammenhang ist mit C++0x (die nächsten C++ - standard und stellen eine "rvalue-Referenz".Rvalue-Referenzen sind eine der wichtigsten Dinge in der kommende standard; Sie ermöglichen die Unterstützung für den 'move' - Semantik für Objekte und erlauben die perfekte Weiterleitung von Funktionsaufrufen.
Es ist ein ziemlich Komplexes Thema - eine der besten Einführungen in die (nicht nur flüchtige) ist ein Artikel von Stephan T. Lavavej, "Rvalue-Referenzen: C++0x-Features in VC10, Teil 2"
Beachten Sie, dass der Artikel noch Recht schwer zu Lesen, aber lohnt sich. Und obwohl es auf einem Microsoft VC++ Blog, alle (oder fast alle) der Informationen ist anwendbar auf beliebige C++0x compiler.
InformationsquelleAutor der Antwort Michael Burr
Ich glaube, das ist ein move-operator.
operator=
ist der Zuweisungsoperator, sagenvector x = vector y
. Dieclear()
Funktion rufen klingt wie als wenn es ist, löschen Sie den Inhalt des Vektors zu verhindern, dass ein memory leak. Der operator gibt einen Zeiger auf den neuen Vektor.Diese Weise
Obwohl wir gab Vektor a Werte, Vektor b hat die Werte. Es ist die Magie des
operator=()
!MSDN-gewusst Wie: erstellen Sie ein move-Konstruktor
InformationsquelleAutor der Antwort yash101