"Si devuelve un valor (no una referencia) de la función, luego lo vincula a una referencia constante en la función de llamada, su duración se extenderá al alcance de la función de llamada."¿Cómo se extiende su duración de un valor de retorno al alcance de la función de llamada cuando está vinculado a una referencia constante en la función de llamada?
Así: CASO A
const BoundingBox Player::GetBoundingBox(void)
{
return BoundingBox(&GetBoundingSphere());
}
Devuelve un valor de tipo const BoundingBox
de la función GetBoundingBox()
variante I: (enlazarlo a una referencia const)
const BoundingBox& l_Bbox = l_pPlayer->GetBoundingBox();
variante II: (Enlazarlo a una copia const)
const BoundingBox l_Bbox = l_pPlayer->GetBoundingBox();
Ambos funcionan bien y no veo el objeto l_Bbox
fuera del alcance. (Aunque, entiendo en la variante, el constructor de copia no se llama y, por lo tanto, es ligeramente mejor que la variante II).
Además, como comparación, realicé los siguientes cambios.
CASO B
BoundingBox Player::GetBoundingBox(void)
{
return BoundingBox(&GetBoundingSphere());
}
con variantes: I
BoundingBox& l_Bbox = l_pPlayer->GetBoundingBox();
y II:
BoundingBox l_Bbox = l_pPlayer->GetBoundingBox();
El objeto l_Bbox
todavía no sale alcance. ¿Cómo "vincularlo a una referencia constante en la función de llamada, su duración se extendería al alcance de la función de llamada", realmente extender la vida útil del objeto al alcance de la función de llamada?
¿Falta algo trivial aquí?
El hecho de que parece funcionar en su compilador específico (que es, por cierto ...?) No significa que vaya a funcionar en ningún otro compilador, ni que esté bien definido y sea legal. –
@Peter: estoy usando MSVC 2008. Lo que se me escapa es por qué/cómo puede tener un efecto en la prolongación de la vida útil. En mi opinión, impide que alguien haga cambios en el objeto (const correctness, etc.) y eso es todo ... – brainydexter
Su variante Me parece un poco gracioso. ¿Su compilador realmente lo acepta sin quejas?Parece que estás inicializando una referencia a no const con un valor r, que no debería permitirse. –