zoukankan      html  css  js  c++  java
  • 自动对象&局部静态对象

    一、关键点

    对象的生命周期:程序执行过程中,该对象存在的那段时间

    局部对象:形参、函数体内部定义的变量

    二、自动对象

    自动对象:只存在于块执行期间的对象

    包括:局部变量、形参

    三、局部静态对象

    特点:该种局部变量的生命周期一直到程序终止

    声明局部静态变量:在声明语句前加上static关键字

    补充:内置类型的局部静态变量的默认初始值为0

    【例子】

    #include <iostream>
    #include <vector>
    #include <cctype>
    #include <iterator>
    #include <stdexcept>
    #include <string>
    #include <cstring>
    
    using std::cin;
    using std::cout;    
    using std::endl;
    using std::vector;
    using std::string;
    using std::runtime_error;
    
    int coco()
    {
    	static int x = 0;
    	x++;
    	return x;
    }
    
    int main() 
    {
    	for (int i = 1; i <= 10; i++) 
    		cout << coco() << endl;		//依次输出1 2 3 4 ... 10 
        return 0;
    }
    

    解释:第一次调用coco()函数时,其中的局部静态变量x先被初始化为0,再进行自加变为1,所以第一次调用返回值为1;而第二次调用时,x的值已经存在且等于函数上一次退出时的x的值,也就是1,然后不再定义x(也就不初始化为0),再进行自加变为2,于是第二次调用返回值为2;依此类推。。

    2018-3-24补充

            static变量和全局变量都存在于进程虚拟内存的数据段中,对于数据段中未初始化的变量,都被赋值为0。

            函数调用只涉及栈帧的增删,而不会删除数据段中的变量,故static变量的生命期将是从定义处到进程结束。

  • 相关阅读:
    Trie图
    Bestcoder Round#45
    Codeforces Round#308
    bestcoder44#1002
    LCA最近公共祖先 Tarjan离线算法
    HYSBZ 1269文本编辑器 splay
    NOI2005维修数列 splay
    hdu3487 伸展树(区间搬移 区间旋转)
    poj3580 伸展树(区间翻转 区间搬移 删除结点 加入结点 成段更新)
    hdu1890 伸展树(区间反转)
  • 原文地址:https://www.cnblogs.com/xzxl/p/7658013.html
Copyright © 2011-2022 走看看