Heim >Backend-Entwicklung >C++ >Wann verhält sich eine R-Wert-Referenz wie ein L-Wert innerhalb einer Funktion?

Wann verhält sich eine R-Wert-Referenz wie ein L-Wert innerhalb einer Funktion?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-25 12:05:09865Durchsuche

When Does an Rvalue Reference Act Like an Lvalue Inside a Function?

Wann verhält sich eine R-Wert-Referenz wie ein L-Wert innerhalb einer Funktion?

Im folgenden Codeausschnitt erhält die Funktion foo eine R-Wert-Referenz Parameter mit dem Namen bar.

void foo(string&&& bar) {
    string* temp = &bar;

    cout << *temp << " @:" << temp << endl;
}

Dieser Code hat eine Frage aufgeworfen: Wird bar als L-Wert behandelt? innerhalb der Funktion, da die Adresse übernommen werden kann?

Ist bar ein R-Wert oder L-Wert?

Diese Frage wird im Wesentlichen innerhalb der Frage selbst beantwortet. Alles, was einen Namen hat, ist ein L-Wert. Daher wird bar als L-Wert wahrgenommen. Es ist jedoch wichtig zu beachten, dass bar den Typ „rvalue reference to string“ hat.

Um bar als rvalue zu behandeln, muss std::move() darauf angewendet werden .

Warum zwischen L-Wert- und R-Wert-Referenzen unterscheiden?

Diese Unterscheidung wird wichtig, wenn man darüber nachdenkt, was an jeden Referenztyp gebunden werden kann. L-Werte können an L-Wert-Referenzen gebunden werden, während R-Werte an R-Wert-Referenzen gebunden werden (und alles kann an eine L-Wert-Referenz an const gebunden werden).

Mit anderen Worten, ein R-Wert kann nicht an eine L-Wert-Referenz gebunden werden und umgekehrt.

Parameter des R-Wert-Referenztyps

Beim Handel Bei einem Funktionsparameter vom R-Wert-Referenztyp ist es wichtig zu verstehen, was dies für den Wert bedeutet, auf den die Referenz verweist. Eine R-Wert-Referenz gibt an, dass der ihr zugewiesene Wert ein R-Wert ist. Folglich werden seine Ressourcen freigegeben, sobald der Ausdruck abgeschlossen ist, sodass er als R-Wert verwaltet werden kann.

Übergabe von R-Wert-Referenzen

Bei der weiteren Übergabe eines R-Wert-Referenzparameters Es gibt zwei Möglichkeiten:

  1. Wenn Sie mit der Referenz fertig sind, verwenden Sie std::move(bar), um dies anzuzeigen dass der Wert, auf den es verweist, ein R-Wert ist.
  2. Wenn Sie beabsichtigen, weitere Operationen auf bar durchzuführen, behalten Sie die L-Wert-Referenz bei, um einen unbeabsichtigten Ressourcendiebstahl zu verhindern.

Fazit

Der Unterschied zwischen L-Wert- und R-Wert-Referenzen liegt nicht in ihrem Verhalten, sobald sie erhalten wurden, sondern vielmehr darin, woran sie gebunden werden können ihnen. Dieses Verständnis ist für den effektiven Umgang und die Verwaltung von Referenzen innerhalb von Funktionen unerlässlich.

Das obige ist der detaillierte Inhalt vonWann verhält sich eine R-Wert-Referenz wie ein L-Wert innerhalb einer Funktion?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn