C ++で参照を返す関数
#include <iostream>
using namespace std;
int &fun()
{
int x = 10;
return x;
}
int main()
{
fun() = 30;
cout << fun();
return 0;
}
このプログラムは非常に危険です、なぜですか?
fun関数はxへの参照を返すので、これは間違いではありません。fun()= 30を介してxの値を変更したいと思います。当初、cout << fun()の出力は30であると考えていましたが、間違っていました。cout< <fun()は10を返します。これは、xがfun()関数のスコープを持つローカル変数であり、返されるxが一時変数であるとは考えていなかったためです。fun()= 30を呼び出すと、一時変数の値が次のように変更されます。 30まで。ただし、一時変数が割り当てられた後は、fun()関数呼び出しが終了すると、自動的に自身の寿命が終了します。
cout << fun()は、この時点で呼び出されたfun()関数のxの値を返すだけです。