Rvalue- och Lvalue-referenser
Svep för att visa menyn
Lvalue och Rvalue
I C++ är lvalues och rvalues två grundläggande kategorier av uttryck:
- Lvalue: ett objekt eller en minnesplats som har ett namn och kan stå på vänster sida av en tilldelning;
- Rvalue: ett temporärt värde eller en literal som inte har en bestående minnesadress och vanligtvis står på höger sida av en tilldelning.
Exempel:
int x = 10; // x is an lvalue, 10 is an rvalue
x = 20; // x (lvalue) can be assigned a new value (rvalue 20)
Lvalue-referenser
En lvalue-referens gör det möjligt att skapa ett alias för en befintlig variabel (en lvalue). Den deklareras med ett enkelt &:
int a = 5;
int& ref = a; // ref is an lvalue reference to a
ref = 8; // changes the value of a to 8
- Lvalue-referenser kan inte bindas till rvalues (temporära värden eller literaler).
Rvalue-referenser
En rvalue-referens gör det möjligt att binda en referens till ett temporärt värde (en rvalue). Den deklareras med &&:
int&& temp = 42; // temp is an rvalue reference bound to the temporary value 42
- Rvalue-referenser kan inte bindas till lvalues (namngivna variabler).
- De är användbara för att optimera kod, till exempel genom att flytta resurser istället för att kopiera dem.
Regler för referensbindning
- Lvalue-referenser (
&) binds till lvalues. - Rvalue-referenser (
&&) binds till rvalues.
Exempel:
int x = 7;
int& lref = x; // valid: lref binds to lvalue x
// int& lref2 = 8; // error: cannot bind lvalue reference to rvalue
int&& rref = 8; // valid: rref binds to rvalue 8
// int&& rref2 = x; // error: cannot bind rvalue reference to lvalue
Att förstå dessa koncept hjälper dig att skriva säkrare och mer effektiv C++-kod, särskilt när du arbetar med moderna funktioner som move-semantik.
Var allt tydligt?
Tack för dina kommentarer!
Avsnitt 1. Kapitel 12
Fråga AI
Fråga AI
Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal
Avsnitt 1. Kapitel 12