谁能解释一下输出?
#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 的原因。