Heim >Backend-Entwicklung >C++ >Ist „bar' ein L-Wert oder ein R-Wert in „void foo(string&& bar)'?

Ist „bar' ein L-Wert oder ein R-Wert in „void foo(string&& bar)'?

Linda Hamilton
Linda HamiltonOriginal
2024-12-20 11:43:14231Durchsuche

Is `bar` an Lvalue or an Rvalue in `void foo(string&& bar)`?

R-Wert-Referenzen und L-Werte verstehen

Betrachten Sie den folgenden Code:

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

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

Hier stellt sich die Frage: Ist Die Variable bar ist ein R-Wert oder ein lvalue?

Antwort: Bar ist ein Lvalue

Obwohl es den Typ „rvalue reference to string“ hat, ist bar immer noch ein Lvalue, weil es einen Namen hat. Ein L-Wert ist per Definition jeder Ausdruck, der zu einem benannten Speicherort ausgewertet wird.

Unterscheidung von R-Wert-Referenzen von L-Wert-Referenzen

Während Sie ähnliche Operationen für R-Wert und ausführen können Wenn es sich um L-Wert-Referenzen innerhalb von Ausdrücken handelt, unterscheiden sie sich erheblich darin, woran sie gebunden werden können sie:

  • L-Wert-Referenzen: Kann sowohl an L-Werte als auch an R-Werte gebunden werden.
  • R-Wert-Referenzen (benannt): Können nur an R-Werte gebunden werden.

Bedeutung von R-Wert-Referenzen

Die Unterscheidung zwischen R-Wert- und L-Wert-Referenzen sind von entscheidender Bedeutung, wenn es um Funktionsparameter des R-Wert-Referenztyps geht. R-Wert-Referenzen übermitteln wertvolle Informationen: Der Wert, auf den sie verweisen, ist ein R-Wert, was bedeutet, dass er temporär ist und nach Abschluss des Ausdrucks zerstört wird. Dies ermöglicht eine sichere Behandlung des referenzierten Werts als R-Wert.

Schlussfolgerung

Der Unterschied zwischen R-Wert- und L-Wert-Referenzen liegt nicht in ihrer Verwendbarkeit innerhalb von Ausdrücken, sondern darin, was möglich ist an sie gebunden sein. R-Wert-Referenzen liefern wichtige Informationen über die Art des referenzierten Werts und ermöglichen so ein effizientes Ressourcenmanagement und eine angemessene Behandlung als R-Wert.

Das obige ist der detaillierte Inhalt vonIst „bar' ein L-Wert oder ein R-Wert in „void foo(string&& bar)'?. 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