Es este código válido C ++ según el estándar?
-
10-10-2019 - |
Pregunta
Tengo este código de ejemplo:
struct A
{
bool test() const
{
return false;
}
};
template <typename T = A>
class Test
{
public:
Test(const T& t = T()) : t_(t){}
void f()
{
if(t_.test())
{
//Do something
}
}
private:
const T& t_;
};
int main()
{
Test<> a;
a.f();
}
Básicamente estoy preocupado por el constructor de Test
donde estoy almacenando una referencia constante a una variable temporal y usarlo en f
methof. ¿La referencia a un objeto temporal sigue siendo válida dentro f
?
Solución
No va siendo válidas. El objeto temporal será destruido después de inicializar a
. En el momento en que se llama a f
invocación de un comportamiento indefinido llamando test
. Sólo es válido lo siguiente:
// Valid - both temporary objects are alive until after the
// full expression has been evaluated.
Test<>().f();
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow