- Qué compilador probablemente sí crea const literal, pero eso no es una variable.
Una referencia no constante no puede apuntar a un literal.
$ g ++ test.cpp test.cpp: En función int main()': test.cpp:10: error: invalid initialization of non-const reference of type 'double&' from a temporary of type 'double' test.cpp:5: error: in passing argument 1 of
doble foo (doble &)'
test.cpp:
#include <iostream>
using namespace std;
double foo(double & x) {
x = 1;
}
int main() {
foo(5.0);
cout << "hello, world" << endl;
return 0;
}
Por otra parte, usted podría pasar un literal a una referencia constante de la siguiente manera. test2.cpp:
#include <iostream>
using namespace std;
double foo(const double & x) {
cout << x << endl;
}
int main() {
foo(5.0);
cout << "hello, world" << endl;
return 0;
}
Esto me parece muy ineficiente. ¿No sería mejor simplemente crear una ubicación de memoria en el segmento de Solo lectura con el valor declarado y usarla en lugar de crear una variable en la pila? Todo detrás de escena, por supuesto ... –
De todos modos, eso depende de la implementación. Y el doble no es tan grande. – sharptooth
La creación de variables temporales también es válida para objetos. En lugar de duplicar si fuera una clase, se habría creado un objeto temporal y también se habría llamado a su constructor. –