Rvalue- og Lvalue-referencer
Stryg for at vise menuen
Lvalues og Rvalues
I C++ er lvalues og rvalues to grundlæggende kategorier af udtryk:
- Lvalue: et objekt eller en hukommelsesplacering, der har et navn og kan stå på venstre side af en tildeling;
- Rvalue: en midlertidig værdi eller literal, der ikke har en vedvarende hukommelsesadresse og normalt optræder på højre side af en tildeling.
Eksempler:
int x = 10; // x is an lvalue, 10 is an rvalue
x = 20; // x (lvalue) can be assigned a new value (rvalue 20)
Lvalue-referencer
En lvalue-reference gør det muligt at oprette et alias for en eksisterende variabel (en lvalue). Den deklareres med et enkelt &:
int a = 5;
int& ref = a; // ref is an lvalue reference to a
ref = 8; // changes the value of a to 8
- Lvalue-referencer kan ikke binde til rvalues (midlertidige værdier eller litteraler).
Rvalue-referencer
En rvalue-reference gør det muligt at binde en reference til en midlertidig værdi (en rvalue). Den deklareres med &&:
int&& temp = 42; // temp is an rvalue reference bound to the temporary value 42
- Rvalue-referencer kan ikke binde til lvalues (navngivne variabler).
- Anvendes til at optimere kode, f.eks. ved at flytte ressourcer i stedet for at kopiere dem.
Regler for referencebinding
- Lvalue-referencer (
&) binder til lvalues. - Rvalue-referencer (
&&) binder til rvalues.
Eksempel:
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
Forståelse af disse begreber hjælper med at skrive mere sikre og effektive C++-programmer, især når der arbejdes med moderne funktioner som move-semantik.
Var alt klart?
Tak for dine kommentarer!
Sektion 1. Kapitel 12
Spørg AI
Spørg AI
Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat
Sektion 1. Kapitel 12