返回对整数的引用时使用C++代码

C++ code while returning reference to integer

本文关键字:C++ 代码 引用 整数 返回      更新时间:2023-10-16

我尝试了以下代码:

int& fun()
{
    static int y = 20;
    //y = 40;
    return y;
}
int main()
{
    fun() = 30;
    cout << fun() <<endl;
    return 0;
}

如果取消了第y = 40行的注释,则main的输出为40。为什么y的值在main()中分配给30时不发生变化?

函数func()的变量y具有static存储持续时间:

3.7.1/1:所有不具有动态存储持续时间、不具有线程存储持续时间和非本地的变量都具有静态储存持续时间。这些实体的存储应持续程序的持续时间

3.7.1/3:关键字static可用于声明具有静态存储持续时间的局部变量。

此类变量的初始化只发生一次。这意味着第一次使用y时,它的值是20,之后它会保留您存储在其中的值。

案例1:任务被注释掉:

语句fun() = 30;将在y中存储30。cout << fun()将使用对y的引用,而fun()不会更改它,因此它将显示30。

情况2:分配被激活:

语句fun() = 30;将在y中存储30。cout << fun()将使用对y的引用,但fun()将首先将其设置为40,因此将显示40。