我在Geek For Geeks中看到了以下示例。
#include<iostream>
using namespace std;
int &fun()
{
static int x = 10;
return x;
}
int main()
{
fun() = 30;
cout << fun();
return 0;
}
Answer is 30.
但是我无法映射,这个值是如何得出的。请帮助我解释这段代码是如何工作的。
经过专家的一些回答,我知道分配给函数的值被分配给静态变量x,这相当于fun():: x = 30
现在,我尝试了另一段代码..其中我在fun()中有2个静态变量并返回第二个变量引用。答案仍然是30.是因为何时分配了fun(),它将值30分配给fun()中的所有变量?
第二段代码是
#include<iostream>
using namespace std;
int &fun()
{
static int x = 10;
static int y =20;
return y;
}
int main()
{
fun() = 30;
cout << fun();
return 0;
}
答案 0 :(得分:3)
fun
会向int&
范围内的static
变量x
返回引用(fun
)。基本上语句fun() = 30
是fun::x = 30
。请注意,这只是安全的,因为x
是static
。
答案 1 :(得分:2)
函数本地静态变量首次初始化为函数并持续到程序结束。所以当你打电话时
fun() = 30;
您返回对该变量的引用,然后为其分配30。由于变量仍然存在,它将保持该值。然后
cout << fun();
将再次返回变量。由于它已经初始化,因此不会重置其值,并返回30,因为它是在前一行中设置的值。