2016-09-27 6 views
0

私はのように、関数のローカル変数への参照を返すために未定義だということを理解する:ローカル変数へのREFを戻す

int& returnIntRef_One() 
{ 
    int value = 5; 

    return value; 

} 

しかし、この機能で:

int& returnIntRef_Two() 
{ 
    int i = 5; 
    int &value =i; 

    return value; 
} 

値が正常に返されるようです。

誰かが私にその違いを教えてもらえますか?

+4

未定義の振る舞い – Jovasa

+0

両方のスニペットが等しく、2番目のスニペットはコンパイラにいくつかのヒントを追加するだけです。 –

+2

"ローカル変数への参照の返却" ...はその変数が 'static'宣言されていない限りnoです。 –

答えて

1

はどのような方法でダングリングリファレンスへのアクセスありがとう未定義の動作です。したがって、2番目の例は未定義の動作です。だから何かが起こることがあります。時折動作することもありますが、それは他の時間にクラッシュする可能性がありますが、クラッシュすることはありませんが、ゴミ値などを与える可能性があります。

要するに、常に動作すると想定してはいけません。

+0

Downvoteの理由は? – taskinoor

関連する問題