Domanda

Qual è la differenza tra:

const double& pi = 3.14;

e (non commerciale):

const double pi = 3.14;

Entrambi sembrano avere la stessa L e R valori così qual è la differenza?

È stato utile?

Soluzione

Per il vostro esempio particolare non c'è differenza.

E questo significa che, non c'è modo di dire loro a parte, qualunque.

Tuttavia, poiché i primi lega un riferimento ad un temporaneo, quando il tipo è di tipo classe temporanea può essere di una classe derivata, per esempio prodotto da una funzione! E ha poi suo distruttore propriamente detta alla fine del campo di applicazione. Questo piccolo el neato trucco è usato nelle implementazioni ScopeGuard (vedi la Articolo originale ScopeGuard in DDJ , da Petru Marginean e Andrei Alexandrescu - Petru inventato ScopeGuard e Andrei fatto una cosa più generale sulla parte superiore)

.

Una volta ho chiesto a Bjarne Stroustrup, che ha creato il linguaggio C ++, il motivo per cui è supportata la sintassi nella prima dichiarazione.

E la sua risposta è stata che era per lo più di avere regole uniformi (vale a dire di non fare alcuna eccezione speciale per i riferimenti locali in contrasto con riferimenti come parametri formali). Credo che in quel momento nessuno di noi erano familiarità con ScopeGuard. E 'semplice in retrospettiva, ma ci vuole una mente come Petru di, o Andrei di, a venire con qualcosa di simile! : -)

Saluti e hth.

Altri suggerimenti

La differenza importante con un riferimento è un riferimento sé è inheritly costante. Una volta che il riferimento stesso è stato inizialmente assegnato ad una variabile, non può quindi fare riferimento a un'altra variabile. Tutti i tentativi di modificare modificherà la variabile si riferisce. Detto questo, il const significherà che il riferimento è un riferimento a un const int.

const int A;
const int B;
const int& Reference = A;
Reference = B; // Error, the value of A can not be assigned, nor would this *ever* be able to make Reference refer to B.

Si può anche verificare questa teoria circa un riferimento stesso di essere costanti in questo modo:

const int& const Reference; // Should give a warning about the second const being redundant.

Un po 'di chiarezza sui riferimenti costanti, riferimenti e costanti per doubles.

Riferimento

Un riferimento si riferisce a un un oggetto esistente e non può essere reseated. Cioè, una volta che si dichiara (definire) il riferimento, sarà sempre riferimento a tale elemento.

riferimento costante

Il linguaggio C ++ consente per dichiarare un riferimento costante. Questo dice al compilatore che il riferimento non cambierà. Questo può essere ridondante in quanto i riferimenti non possono essere sia collegato. Tuttavia, la sintassi del linguaggio lo permette.

Costante

Una costante è un valore, e non si fare riferimento per nulla.

Ottimizzazioni & Sostituzioni

Il compilatore è consentito sostituto (sostituire) un riferimento a un oggetto, costante o letterale con l'oggetto corrispondente, costante o letterale, a condizione che il compilatore può garantire che nessun operazioni di scrittura vengono eseguite per quell'oggetto nel campo è utilizzato. Questa determinazione può diventare difficile quando si passa il riferimento a metodi o funzioni all'interno di tale campo di applicazione.

Come specificare il modificatore const ad un riferimento renderà il lavoro del compilatore più facile per l'ottimizzazione. Il riferimento costante è un contratto con il programmatore e l'utente che il riferimento non sarà modificato.

const double & è un riferimento a una costante doppia, l'altra è una doppia costante. Un riferimento è una specie di un puntatore const, un puntatore che non cambia mai.

In C ++ i riferimenti sono intrinsecamente const. Una volta che sono stati assegnati si può non li cambia. Essi devono essere sia dichiarato e inizializzato.

L'isnt const solo come riferimento il valore è const, così si dovrebbe essere in grado referense Riassegna, che significa quanto segue sarebbero ok:

const double& pi = 3.14;
const double  pi2 = 2.78;
pi = *(&pi2);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top