重複の可能性:ローカル変数
または一時変数のアドレスを返す
ローカル変数のメモリにそのスコープ外でアクセスできますか?
次の切り取りの結果として何が起こるかを知っていても、それがどのように起こっているかを理解するのに役立ちます. 4 つの質問が続きます。
与えられた:
int& foo()
{
int i = 1;
return i;
}
そして、以下では、i という名前のローカルへの参照が intVal に割り当てられた temp に逆参照され、ローカル iがfoo()の最後で消えることを知っています。
int intVal = foo();
最初の質問 - 以下では、式の右側は上記と同じです。これは、コンパイラが左側を見て、コンテキストに基づいて、返された参照を逆参照しないことを認識し、代わりに新しい参照を作成するには、それで初期化されますか?
2 番目の質問 - これだけで、intRef がスコープ内にある間、ローカル iが固執しますか?
int& intRef = foo();
3 番目の質問 - 次のintPtrはローカル iのアドレスを取得します。それで、コンパイラは割り当てのコンテキストを使用し、参照のアドレスを取得する前に値を取得するために逆参照しないことを決定していますか(逆参照された値を含む一時のアドレスを取得すると言うのではなく)?
4 番目の質問 - intPtrがスコープ内にある間、 local iは固執しますか?
int* intPtr = &foo();