Attualmente sto imparando C++ da C++ Primer e spiega come un riferimento è un alias per un altro nome di variabile. Spiega anche come un puntatore punta a un'altra variabile. Afferma che la differenza tra un puntatore e un riferimento è che i puntatori possono essere riassegnati e i riferimenti non possono.Qual è la differenza funzionale tra un puntatore const (non un puntatore a const) e un riferimento?
Nell'esempio di codice seguente, cosa posso fare con il puntatore o il riferimento che non riesco a fare con l'altro?
double pi = 3.14;
double &piRef = pi;
double *const piPnt = π
//both of these examples are valid and do the same thing
piRef = 3.14159;
*piPnt = 3.14159;
//however, if I attempt to reassign what the pointer points to, it is illegal.
//this is the same as with a reference, as a reference can't be reassigned either
double tau = 6.28;
piPnt = τ
sono consapevole delle differenze interne di ciascuno (come un puntatore che è un oggetto, un riferimento non è). Sono interessato a come queste differenze siano importanti per il programmatore oltre una sintassi leggermente diversa. In quanto tale, questo non è un duplicato della domanda this in cui la risposta accettata parla solo di differenze interne.
@juanchopanza Il puntatore nel mio esempio è un puntatore const, pertanto non può essere riassegnato. – john01dav
Ma è possibile utilizzare l'assegnazione sul riferimento. Ricorda solo che è un alias per qualcos'altro. – juanchopanza
@juanchopanza Posso riassegnare il valore a cui punta il puntatore. Ad esempio, sia 'piRef = 3.14159' che' * piPnt = 3.14169' sarebbero validi. Un puntatore può essere const senza puntare a un oggetto const. – john01dav