局部静态对象在函数中不会重新被赋值么?

诚朴求食 诚朴求食 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区

#include <iostream>
using namespace std;

size_t count_calls(){
static size_t ctr = 0;
return ++ctr;
}

void main(void){
for (size_t i = 0; i != 10; ++i)
cout << count_calls() << endl;
system("pause");
}

请问这一段代码,在调用 count_calls()时,为什么运行到static size_t ctr = 0;不会被重新赋值为0么?
局部静态对象只是在调用函数后不销毁这个变量,这里我明白。
但是在重复运行这个函数时,运行到static size_t ctr = 0这句话时难道不应该被重新赋值为0了么?

运行结果:
...全文

相关推荐

C++程序的生与死,C++中的四种对象(全局对象、局部对象、静态(static)对象、以new方式产生出来的局部对象),以及在C++中有四种方法可以产生一个对象

C++程序的生与死(构造函数和析构函数),C++中的四种对象(全局对象、局部对象、静态(static)对象、以new方式产生出来的局部对象),以及在C++中有四种方法可以产生一个对象(in stack、in heap、global、local static)。

xuexijavakaifa

c++静态局部变量和静态函数示例

在函数体内定义了一个变量,每当程序运行到该语句时都会给该局部变量分配栈内存。但随着程序退出函数体,系统就会收回栈内存,局部变量也相应失效。但有的时候我们需要在两次调用之间对变量的值进行保存。通常的想法是定义一个全局变量来实现。但是这样一来,变量已经不再属于函数本身了,不再仅受函数的控制,给程序的维护带来不便。静态局部变量正好可以解决这个问题。静态局部变量保存在全局数据区,而不是保存在栈中,每次的值保持到下一次调用,直到下次赋新值。该变量在全局数据区内分配内存;静态局部变量在程序执行到该对象的声明处时被首次初始化,即以后的函数调用不再进行初始化(这一点非常的重要);静态局部变量一般在声明处初始化

weixin_38557727

全局变量、静态全局变量、静态局部变量和局部变量的区别2.pdf

变量可以分为全局变量、静态全局变量、静态局部变量和局部变量 按存储区域分:全局变量、静态全局变量和静态局部变量都存放在内存的全局数据区,局部变量存放在内存的栈区 按作用域分:全局变量在整个工程文件内都有效;静态全局变量只在定义它的文件内有效;静态局部变量只在定义它的函数内有效,只是程序仅分配一次内存,函数返回后,该变量不会消失;局部变量在定义它的函数内有效,但是函数返回后失效。

MARSDON

单片机之静态局部变量static

如果定义成局部变量,则必须定义成静态局部变量,静态局部变量是在编译时赋初值的,只赋初值一次,以后每次调用函数时不再重新赋初值而只是保留上次函数调用结束时的值。

weixin_38526208

C++中的局部变量、全局变量、局部静态变量、全局静态变量的区别

本文主要介绍了C++中的局部变量、全局变量、局部静态变量、全局静态变量的区别。具有很好的参考价值,下面跟着小编一起来看下吧

weixin_38719578
评论 7
收藏 已收藏
分享
返回顶部
诚朴求食
C++ 语言 65,214 成员 250,514 内容