Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Impara Riferimenti Rvalue e Lvalue | Sezione
Puntatori e Riferimenti in C++

bookRiferimenti Rvalue e Lvalue

Scorri per mostrare il menu

Lvalue e Rvalue

In C++, lvalue e rvalue sono due categorie fondamentali di espressioni:

  • Lvalue: un oggetto o una posizione di memoria che ha un nome e può apparire sul lato sinistro di un'assegnazione;
  • Rvalue: un valore temporaneo o letterale che non ha un indirizzo di memoria persistente e di solito appare sul lato destro di un'assegnazione.

Esempi:

int x = 10;      // x is an lvalue, 10 is an rvalue
x = 20;         // x (lvalue) can be assigned a new value (rvalue 20)

Riferimenti a Lvalue

Un riferimento a lvalue consente di creare un alias per una variabile esistente (un lvalue). Si dichiara utilizzando un singolo &:

int a = 5;
int& ref = a;   // ref is an lvalue reference to a
ref = 8;        // changes the value of a to 8
  • I riferimenti a lvalue non possono essere associati a rvalue (temporanei o letterali).

Riferimenti a Rvalue

Un riferimento a rvalue consente di associare un riferimento a un valore temporaneo (un rvalue). Si dichiara utilizzando &&:

int&& temp = 42; // temp is an rvalue reference bound to the temporary value 42
  • I riferimenti a rvalue non possono essere associati a lvalue (variabili con nome).
  • Sono utili per ottimizzare il codice, ad esempio spostando risorse invece di copiarle.

Regole di Associazione dei Riferimenti

  • I riferimenti a lvalue (&) si associano a lvalue.
  • I riferimenti a rvalue (&&) si associano a rvalue.

Esempio:

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

Comprendere questi concetti aiuta a scrivere codice C++ più sicuro ed efficiente, soprattutto quando si utilizzano funzionalità moderne come le move semantics.

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 1. Capitolo 12

Chieda ad AI

expand

Chieda ad AI

ChatGPT

Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione

Sezione 1. Capitolo 12
some-alt