5

谁能解释一下输出?

#include<iostream>

using namespace std;  

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

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

输出为 30

4

4 回答 4

11

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

于 2012-08-21T09:22:15.167 回答
2

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

这很清楚,不是吗?

基本上,foo()返回.x

于 2012-08-21T09:22:09.580 回答
2

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

于 2012-08-21T09:31:48.650 回答
0

AS fun 是对函数的引用,因此当您编写此行时 fun() = 30;,它会将 30 存储在其返回值中,即x,这就是您将输出设为 30 的原因。

于 2012-08-21T09:23:56.600 回答