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.
Tack för dina kommentarer!
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
Rvalue- och Lvalue-referenser
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.
Tack för dina kommentarer!