2012-01-19 12 views
-6

可能性の重複参照作業を返す:このコードが動作するのはなぜ(matrixがクラスである)
Returning a reference can work?どのようにここに

const int max_matrix_temp = 7; 
matrix&get_matrix_temp()  
{ 
    static int nbuf = 0; 
    static matrix buf[max_matrix_temp]; 

    if(nbuf == max_matrix_temp)  
     nbuf = 0; 

    return buf[nbuf++]; 
} 

matrix& operator+(const matrix&arg1, const matrix&arg2) 
{ 
    matrix& res = get_matrix_temp(); 
    //... 
    return res; 
} 

bufはここで何をやっていますそれがどうやって私たちを救うのでしょうか?ゴミ値となぜそれが宣言されたstatic正しく啓発してください。

+1

元の質問に対する回答(http://stackoverflow.com/questions/8924966/returning-reference/8924994#8924994)に示されているように、それは静的であると宣言されています。それ以外の場合は、関数が完了した時点で存在しなくなり、配列内の要素への参照が無効であることを意味します。 –

答えて

0

なぜコードが整理されているのかはわかりませんが、静的にすると関数の終了時にも生き残ります。静的を使用しない場合は、スタックに割り当てられ、後で書き換えられます。

関連する問題