creo siguiente código debe generar un error:const char * a const std :: string &
#include <iostream>
#include <string>
static void pr(const std::string &aStr)
{
std::cout << aStr << "\n";
}
int main(void)
{
const char *a = "Hellu";
pr(a);
return 0;
}
Pero gcc 4.1.2 compila successuflly.
¿Es que el constructor de std :: string se interpone, creando una instancia de std :: string?
Creo que no debería, porque la referencia es simplemente un alias de una variable (en este caso, no hay ninguna variable de tipo std :: string a la que hace referencia la referencia).
¿Alguien está ahí para explicar por qué el código se compila con éxito?
Gracias de antemano.
Hechos interesantes. Uno está aprendiendo todos los días;). Aunque no recibí tu segunda oración. ¿Quiere decir si el encabezado de la función sería 'void pr (std :: string & aStr)' una construcción de un temporal (al implicar) no es posible por el standart? – Paranaix
@Paranaix: Correcto - 'pr (std :: string &)' no podría aceptar un objeto temporal. –
@JerryCoffin, entonces, ¿hay alguna manera de evitar que el compilador haga una instancia temporal? – orchistro