危険な操作:C ++で参照を返す関数

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の値を返すだけです。

おすすめ

転載: blog.csdn.net/weixin_45590473/article/details/108684705