reglas con objetos temporales y argumentos por referencia
Pregunta
decir que tengo una clase:
class A
{
public:
A() {}
};
y una función:
void x(const A & s) {}
y lo hago:
x(A());
Podría alguien explicarme las reglas con respecto a los objetos que pasan por referencia temporales? En términos de lo que permite el compilador, donde se necesita const, si una copia implícita sucede, etc. De jugar, parece que lo que necesita la const lo cual tiene sentido, pero hay una regla formal en relación con todo esto?
Gracias!
Solución
Hay una regla formal - el estándar de C ++ (sección 13.3.3.1.4 si está interesado) afirma que un temporal solo se pueden unir a una referencia constante - si se intenta utilizar una referencia no const el compilador debe flag esto como un error.
Otros consejos
Herb Sutter hace un buen trabajo explicando aquí: http://www.gotw.ca /gotw/081.htm
x () o bien debe tener una referencia const a un A temporal, o x () deben tener una A por valor.