pensé referencias sólo se extienden la vida útil de los temporales de la vida útil de la propia referencia, pero la salida del siguiente fragmento parece contradictoria:¿Cuál es la duración de un argumento predeterminado vinculado temporalmente a un parámetro de referencia?
#include <iostream>
struct X{ ~X(){ std::cout << "Goodbye, cruel world!\n"; } };
X const& f(X const& x = X()){
std::cout << "Inside f()\n";
return x;
}
void g(X const& x){
std::cout << "Inside g()\n";
}
int main(){
g(f());
}
Live example. Salida:
Inside f()
Inside g()
Goodbye, cruel world!
por lo que parece el temporal se destruye después de que se llama g()
... ¿qué da?
Es normalmente se considera hostil para no dejar una explicación cuando downvoting. – Xeo
Mi conjetura es que el infractor accidentalmente presionó el botón de abajo hacia abajo cuando en realidad querían presionar el botón de reenvío (mirando el total de los votos por su respuesta y la pregunta también apoya esta teoría). ¡Pero quién sabe! –
@Jesse: Buena teoría, pero la respuesta tenía más votos positivos que la pregunta antes de que llegara el voto en baja. :) – Xeo