Quello che succede qui:Cosa succede quando si passa il riferimento al letterale in C++?
double foo(const double& x) {
// do stuff with x
}
foo(5.0);
- fa il compilatore a creare una variabile anonima e imposta il suo valore a 5,0?
- La x fa riferimento a una posizione di memoria nella memoria di sola lettura? Si tratta di un fraseggio strano, lo so ...
Edit: Ho dimenticato la parola chiave const ...
Questo mi sembra molto inefficiente. Non sarebbe meglio solo creare una posizione di memoria nel segmento di sola lettura con il valore dichiarato e utilizzarlo invece di creare una variabile nello stack? Tutto dietro le quinte, ovviamente ... –
Questo dipende comunque dall'implementazione. E il doppio non è così grande. – sharptooth
La creazione di variabili temporanee vale anche per gli oggetti. Invece di raddoppiare se fosse una classe, allora sarebbe stato creato un oggetto temporaneo e anche il suo costruttore sarebbe stato chiamato. –