Ich lese STL-Quellcode und habe keine Ahnung, was der &&
Adressoperator tun soll. Hier ist ein Codebeispiel von stl_vector.h
:
vector&
operator=(vector&& __x) // <-- Note double ampersands here
{
// NB: DR 675.
this->clear();
this->swap(__x);
return *this;
}
Ist "Adresse der Adresse" sinnvoll? Warum gibt es zwei Adressoperatoren anstelle von nur einem?
c++
stl
operator-keyword
memory-address
Anarki
quelle
quelle
&
gäbe, hätte dies nichts mit der Adresse des Operators zu tun, sondern bedeutet, dass dies__x
eine Referenz ist.Antworten:
Dies ist C ++ 11- Code. In C ++ 11 kann das
&&
Token als "rWertreferenz" bezeichnet werden.quelle
&&
ist neu in C ++ 11.int&& a
bedeutet "a" ist eine r-Wert-Referenz.&&
wird normalerweise nur verwendet, um einen Parameter einer Funktion zu deklarieren. Und es braucht nur einen r-Wert-Ausdruck. Wenn Sie nicht wissen, was ein r-Wert ist, ist die einfache Erklärung, dass er keine Speicheradresse hat. ZB sind die Zahl 6 und das Zeichen 'v' beide r-Werte.int a
a ist ein l-Wert, ist jedoch(a+2)
ein r-Wert. Beispielsweise:Hoffe das ist informativ.
quelle
int&& c = std::move( b );
usw. passieren würde&&
ist neu in C ++ 11 und bedeutet, dass die Funktion eine RValue-Referenz akzeptiert, dh eine Referenz auf ein Argument, das zerstört werden soll.quelle
Wie andere Antworten bereits erwähnt haben, ist das
&&
Token in diesem Kontext neu in C ++ 0x (dem nächsten C ++ - Standard) und stellt eine "rWertreferenz" dar.R-Wert-Referenzen sind eines der wichtigsten neuen Dinge im kommenden Standard. Sie ermöglichen die Unterstützung der Bewegungssemantik von Objekten und ermöglichen die perfekte Weiterleitung von Funktionsaufrufen.
Es ist ein ziemlich komplexes Thema - eine der besten Einführungen (die nicht nur flüchtig ist) ist ein Artikel von Stephan T. Lavavej, "Rvalue References: C ++ 0x Features in VC10, Part 2".
Beachten Sie, dass der Artikel immer noch ziemlich schwer zu lesen ist, sich aber lohnt. Und obwohl es sich um ein Microsoft VC ++ - Blog handelt, sind alle (oder fast alle) Informationen auf jeden C ++ 0x-Compiler anwendbar.
quelle
&&
Token selbst ist nicht neu. seine Bedeutung in Erklärungen ist. Aber das wusstest du.Ich glaube, das ist ein Umzugsoperator.
operator=
ist beispielsweise der Zuweisungsoperatorvector x = vector y
. Derclear()
Funktionsaufruf klingt so, als würde er den Inhalt des Vektors löschen, um einen Speicherverlust zu verhindern. Der Operator gibt einen Zeiger auf den neuen Vektor zurück.Diesen Weg,
Obwohl wir dem Vektor a Werte gegeben haben, hat der Vektor b die Werte. Es ist die Magie der
operator=()
!MSDN - So erstellen Sie einen Verschiebungskonstruktor
quelle