Esto genera F~
pero esperaba ~F
NO es la tecnología más importante ... ¿pero qué es esto?
#include <iostream>
struct Foo {
int _x;
operator const int &() const {return _x;}
~ Foo() {std :: cout << "~";}
};
void foo (const int &)
{
std :: cout << "F";
}
int main()
{
foo (Foo());
}
construí esto como un contraejemplo para demostrar que la const más importante es la excepción y no la regla. Normalmente se escribe como
cuando una referencia const se une a un temporal, entonces el tiempo de vida de que temporal se extiende a toda la vida útil de la referencia
yo estaba tratando de ilustrar que, aunque Foo()
es una temporal, la referencia a _x
devuelta por el operador de conversión no lo es, y que el código anterior no es seguro.
Pero la salida parece probar que el ejemplo es segura, la vida útil del temporal Foo()
se extiende por la existencia de una referencia constante a uno de sus miembros.
¿Es esto correcto? ¿Dónde está especificado en el estándar?
Volviendo referencias es más a menudo una mala idea que uno bueno. Este es un buen ejemplo de eso. –
@ R.MartinhoFernandes ¿Entonces declaras 'operador []' como ...? – curiousguy