C++ 中静态局部变量的范围和生存期
The scope and lifetime of static local variable in 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() 函数吗?;I那么,为什么我们可以在主函数中更改它的值?
范围有限意味着禁止任何直接在范围之外访问x
的尝试。
在作用域内,非限定名称查找可用于关联 名称及其声明。
但是,如果变量处于活动状态,并且通过指向同一变量的引用或指针对其进行更改,则始终可以返回对此变量的指针或引用。此引用的名称可以是匿名的(临时的),也可以绑定到某个命名引用。
关于生命周期,它在第一次调用包含静态变量的函数时开始,在程序结束时结束。
事实上,x
的范围仅限于fun()
。
但是因为该函数返回对x
的引用,所以调用者(即 main
) 能够通过该引用修改x
。这就是这里发生的事情:x
设置为第一次输入函数时10
,但被赋值fun() = 30
更改为 30。
相关文章:
- GCC对可能有效的代码抛出init list生存期警告
- 在不复制临时对象的情况下延长其生存期
- 结束另一个线程中使用的对象的生存期
- "this"指针的值在对象的生存期内是否恒定?
- 创建具有全局生存期的 UObject
- C++17 和静态临时生存期的参考扩展
- 数组对象的生存期是否在重用其元素存储时结束?
- 从“if constexpr”分支扩展对象生存期/范围
- 为什么免费存储区中对象的生存期绑定到范围
- 对范围和堆内存生存期感到困惑
- 范围内临时对象的生存期是多少?
- C++ 中静态局部变量的范围和生存期
- 封闭环变量的生存期和范围是什么
- 基于范围的 for 循环的对象生存期问题
- 表达式范围内的临时生存期
- 静态变量生存期、文件范围与函数范围
- C++向量、常量字符*、变量范围和生存期
- 变量的范围与生存期
- 延长boost::filtered范围的生存期
- c++ 循环中变量的范围和生存期"for"