这段C ++代码如何工作?

时间:2015-09-01 12:11:49

标签: c++ reference return-value

我在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;
}

2 个答案:

答案 0 :(得分:3)

fun会向int&范围内的static变量x返回引用(fun)。基本上语句fun() = 30fun::x = 30。请注意,这只是安全的,因为xstatic

答案 1 :(得分:2)

函数本地静态变量首次初始化为函数并持续到程序结束。所以当你打电话时

fun() = 30;

您返回对该变量的引用,然后为其分配30。由于变量仍然存在,它将保持该值。然后

cout << fun();

将再次返回变量。由于它已经初始化,因此不会重置其值,并返回30,因为它是在前一行中设置的值。