有人能解释输出吗

can anyone explain the output?

本文关键字:输出 能解释      更新时间:2023-10-16

有人能解释一下输出吗?

#include<iostream>
using namespace std;  
int &fun(){   
  static int x = 10;   
  return x;   
} 
int main(){         
  fun() = 30;
  cout << fun();          
  return 0;         
}

输出为30

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

您通过引用返回静态,所以当您执行fun() = 30时,您会更改它。

很清楚,不是吗?

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

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

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