任何人都可以解释输出?

时间:2012-08-21 09:21:05

标签: c++ function

任何人都可以解释输出吗?

#include<iostream>

using namespace std;  

int &fun(){   
  static int x = 10;   
  return x;   
} 

int main(){         
  fun() = 30;
  cout << fun();          
  return 0;         
}

输出为30

4 个答案:

答案 0 :(得分:10)

这就是静态本地工作的方式 - 它们在函数调用之间保持值。基本上fun()有一个静态局部并返回对它的引用,效果与全局变量的效果大致相同。

答案 1 :(得分:2)

您可以通过引用返回静态,因此当您fun() = 30进行更改时。

很清楚,不是吗?

基本上,foo()会将引用返回给x

答案 2 :(得分:1)

当您调用fun()时,会创建一个静态变量并返回对它的引用。基本上,由于static,即使退出函数的范围,变量也不会被销毁。您使用30影响参考,然后调用您获得的函数30(第二次调用时的x在第一次调用时完全相同)。基本上静态在这种情况下就像一个全局变量。

答案 3 :(得分:0)

AS fun是对函数的引用,所以当你写这行时 fun() = 30;它在返回值中存储了30,即x,这就是为什么输出为30的原因。