Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Rvalue- og Lvalue-referencer | Section
C++ Pointers og Referencer

bookRvalue- 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?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 1. Kapitel 12

Spørg AI

expand

Spørg AI

ChatGPT

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
some-alt