C++ static静态变量(无师自通)

C++ static静态变量(无师自通),第1张

概述虽然函数在程序中可以被多次调用,但是存储在函数局部变量中的值并不会持久存在,这是因为局部变量在函数终止时即被销毁,然后在函数再次被调用时又会被重新创建。下面的程序 虽然函数在程序中可以被多次调用,但是存储在函数局部变量中的值并不会持久存在,这是因为局部变量在函数终止时即被销毁,然后在函数再次被调用时又会被重新创建。下面的程序说明了这种变化:
#include <iostream>using namespace std;voID showLocal(); //Function prototypeint main(){    showLocal();    showLocal();    return 0;}voID showLocal(){    int localNum = 5;   // Local variable    cout << "localNum is " << localNum << endl;    localNum = 99;}
程序输出结果:

localNum is 5
localNum is 5

即使在第  16 行中,showLocal 函数中的最后一个语句将 99 存储在 localNum 中,但是,当该函数终止时,localNum 变量仍然被销毁。下一次调用该函数时,localNum 重新创建并重新初始化为 5。

然而,有时候需要让程序“记住”在函数调用之间的局部变量中存储了什么值,这可以通过使变量成为静态变量来实现。当函数返回时,静态局部变量不会被销毁,它们存在于程序的整个一生中,尽管它们的作用域只是在定义它们的函数中。

下面的程序使用了静态局部变量来计算调用函数的次数:
#include <iostream>using namespace std;voID showStatic();  // Function prototypeint main(){    // Call the showStatic function five times    for (int count = 0; count < 5; count++)        showStatic();    return 0;}voID showStatic(){    static int numCalls = 0; // Static local variable    cout << "This function has been called " << ++numCalls << " times." << endl;}
程序输出结果:

This function has been called 1 times.
This function has been called 2 times.
This function has been called 3 times.
This function has been called 4 times.
This function has been called 5 times.

此程序的第 15 行中,定义了静态变量 numCalls,并且将其初始化为 0。每次调用 showStatic 函数时,它将在第 16 行中递增一次,并且由于它是静态变量,所以它在调用之间会保留其值。

有人可能会认为每次调用 showStatic 函数时,numCalls 将被重新初始化为 0,但是不会发生这种情况,因为只有在创建该变量时才会初始化一个变量,而在程序运行期间静态变量只创建一次。如果没有初始化 numCalls,那么它将自动初始化为 0,因为和全局变量一样,如果程序员没有初始化数字静态局部变量,则它们将自动初始化为 0。
总结

以上是内存溢出为你收集整理的C++ static静态变量(无师自通)全部内容,希望文章能够帮你解决C++ static静态变量(无师自通)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1231304.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存