C++ 中静态局部变量的范围和生存期

The scope and lifetime of static local variable in c++

本文关键字:范围 生存期 局部变量 静态 C++      更新时间:2023-10-16
#include<iostream>
using namespace std;
int &fun()
{
    static int x = 10;
    return x;
}
int main()
{
    fun() = 30;
    cout << fun();
    return 0;
}

当上面的程序运行时,输出为 30.返回整数变量 x,作为对 main() 函数的引用,并为其赋值 30.但是 x 的范围不仅限于 fun() 函数吗?;I那么,为什么我们可以在主函数中更改它的值?

范围有限意味着禁止任何直接在范围之外访问x的尝试。

在作用域内,非限定名称查找可用于关联 名称及其声明。

但是,如果变量处于活动状态,并且通过指向同一变量的引用或指针对其进行更改,则始终可以返回对此变量的指针或引用。此引用的名称可以是匿名的(临时的),也可以绑定到某个命名引用。

关于生命周期,它在第一次调用包含静态变量的函数时开始,在程序结束时结束。

事实上,x的范围仅限于fun()

但是因为该函数返回对x的引用,所以调用者(即 main ) 能够通过该引用修改x。这就是这里发生的事情:x设置为第一次输入函数时10,但被赋值fun() = 30更改为 30。