retornando referências à variável local [duplicado]

Duplicata Possível:
Retornando o endereço da variável local ou temporária
A memória de uma variável local pode ser acessada fora de seu escopo?

Mesmo sabendo o que acontece como resultado dos recortes a seguir, seria útil entender como isso está acontecendo. Quatro perguntas seguem.

Dado:

int& foo()
{
    int i = 1;
    return i;
}

E sabendo que a seguir uma referência aolocal nomeado i é de-referenciado em uma temp que é designada para intVal eeu local desaparece no final defoo ()

int  intVal = foo();

Primeira pergunta - a seguir, o lado direito da expressão é o mesmo que acima, então é um caso em que o compilador vê o lado esquerdo e, com base no contexto, sabe não desreferenciar a referência retornada e, em vez disso, criar uma nova referência é inicializado com ela?

Segunda pergunta - e isso só faz com que oeu local ficar por aqui enquanto intRef está no escopo?

int& intRef = foo();

Terceira pergunta - abaixointPtr Obtém endereço deeu local. Então, o compilador está usando o contexto da atribuição e decidindo não excluir a referência para obter um valor antes de obter o endereço da referência (em vez de informar o endereço de uma temperatura que contém o valor de referência)?

Quarta questão - nãoeu local ficar por aí enquantointPtr está no escopo?

int* intPtr = &foo();   

questionAnswers(2)

yourAnswerToTheQuestion