这段c++代码是如何工作的

How does this piece of C++ code work?

本文关键字:工作 何工作 c++ 代码 这段      更新时间:2023-10-16

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

fun返回对fun作用域中static变量x的引用(int&)。本质上,表述fun() = 30等于fun::x = 30。注意这是安全的,因为xstatic

函数局部静态变量在第一次进入函数时初始化,并一直保存到程序结束。所以当你调用

fun() = 30;

返回对该变量的引用,然后给它赋值30。由于变量仍然存在,它将保留该值。

cout << fun();

将再次返回该变量。因为它已经初始化了,所以它不会重置它的值,它返回30,因为这是前一行设置的值。