Por que uma referência não-const não pode se ligar a um objeto temporário?
Por que não é permitido obter referência não-const a um objeto temporário, cuja funçãogetx()
retorna? Claramente, isso é proibido pela C ++ Standard, mas estou interessado no propósito de tal restrição,não é uma referência para o padrão.
struct X
{
X& ref() { return *this; }
};
X getx() { return X();}
void g(X & x) {}
int f()
{
const X& x = getx(); // OK
X& x = getx(); // error
X& x = getx().ref(); // OK
g(getx()); //error
g(getx().ref()); //OK
return 0;
}
É claro que a vida útil do objeto não pode ser a causa, porque a referência constante a um objeto énão proibido pelo padrão C ++.É claro que o objeto temporário não é constante na amostra acima, porque as chamadas para funções não constantes são permitidas. Por exemplo,ref()
poderia modificar o objeto temporário.Além do que, além do mais,ref()
permite enganar o compilador e obter um link para este objeto temporário e que resolve o nosso problema.Além do que, além do mais:
Eles dizem que "atribuir um objeto temporário à referência const estende a vida útil desse objeto" e "Nada é dito sobre referências não-const embora". Minhaspergunta adicional. A seguinte atribuição estende a vida útil do objeto temporário?
X& x = getx().ref(); // OK