c ++中静态局部变量的范围和生命周期

时间:2016-06-10 07:42:37

标签: c++

#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()函数?;如果是这样,为什么我们能够在main函数中更改它的值?

2 个答案:

答案 0 :(得分:2)

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

  

在范围内,可以使用非限定名称查找来关联   名称及其声明。

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

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

答案 1 :(得分:1)

确实x 的范围仅限于fun()

但是因为该函数将引用返回给x,调用者(即main)能够通过x >那个参考。这就是这里发生的事情:x设置为10输入功能的第一个时间,但是通过赋值更改为30 { {1}}。