可能性の重複:
Returning the address of local or temporary variable
Can a local variable’s memory be accessed outside its scope?返す参照
でも、次の結果は、起こっているかを理解するのに役立つだろう切れ端のように何が起こるのかを知ります。 4つの質問が続きます。
考える:
int& foo()
{
int i = 1;
return i;
}
そして私に命名ローカルに次の参照はINTVALに割り当てられ、ローカルIはの終わりに消滅する一時にデ参照されていることを知りますのfoo()
int intVal = foo();
最初の質問 - 以下に、式の右辺は、そうである上記と同じですこれは、コンパイラが左辺を見て、コンテキストに基づいて、返された参照を逆参照しないことを知っています。代わりに、新しい参照を作成する代わりに、その参照で初期化されますか?
2番目の質問 - これだけで、ローカルiは、intRefが有効範囲内にあります。
int& intRef = foo();
3番目の質問 - 怒鳴るのIntPtrがローカルIのアドレスを取得します。だから、コンパイラは、割り当てのコンテキストを使用し、参照のアドレスを取る前に値を取得するために参照解除しないことを決定します(de-referenced値を含むtempのアドレスを取るというよりも)か?
第4問 - ローカルiスティック回りintPtrは範囲内ですか?
int* intPtr = &foo();
ここで何が起こるかを知るのは無意味です。 FWIW、それは決して回りません。そして、最初のものでは何かが起こるのに十分長く留まりません。 –
「一時」はありません! –
可能な重複:[ローカルまたは一時変数のアドレスを返す](http://stackoverflow.com/q/2744264/187543) – cpx