zoukankan      html  css  js  c++  java
  • C++ static

    1.生命周期问题:static变量在固定的内存区域进行存储分配,变量生命期一直到程序运行结束。而普通变量:局部变量和全局变量的存储分配在不同的地方进行,局部变量是在堆栈里面存储分配,变量生命周期随着函数的退出而结束;全局变量是在静态存储区存储分配(跟static变量一样)。

    2.可见性问题:一个类里面的static变量在类外是不可见的;函数内部的static变量在函数外是不可见的;函数外的static变量只在当前编译单元可见。

    3.初始化问题:全局static变量在main函数运行前初始化;局部static变量在第一次所在函数被调用时初始化。对于内部类型,字符类型初始化为ascii值为0的字符,其他类型初始化为0;用户定义类型,要由构造函数初始化。

    注:如果一个包含局部static对象的函数未被调用,那么这个对象的构造函数也不会被调用。

    4.静态对象的析构函数调用:在程序从main()中退出时,或者标准的C库函数exit()函数被调用时才被调用。调用abort()退出程序时,静态对象的析构函数并不会被调用。静态对象的销毁也是按与初始化时相反的顺序进行的。

    #include<fstream>
    #include <stdlib.h>
    #include<iostream>
    using namespace std;
    ofstream out("static.out");
    class obj
    {
            char c;
            public:
            obj(char cc):c(cc)
            {
            out<<"obj::obj() for"<<c<<endl;
            }
            ~obj()
            {
            out<<"obj::~obj() for"<<c<<endl;
            }
    };
    obj a ('a');
    void f()
    {
            static obj b('b');
    }
    void g()
    {
            static obj c('c');
    }
    int main()
    {
            out<<"inside main()"<<endl;
            f();
            static char c;
            static float f;
            static int i;
            cout<<"char c:"<<c<<endl;
            cout<<"float f:"<<f<<endl;
            cout<<"int i:"<<i<<endl;
            out<<"leaving main()"<<endl;
    
    
            return 0;
    
    }
    

    static.out文件:

  • 相关阅读:
    bfs两种记录路径方法
    次小生成树
    2018 ICPC 区域赛 焦作场 D. Keiichi Tsuchiya the Drift King(计算几何)
    数组分组
    POJ
    数位DP详解
    2018ICPC青岛 E
    HDU
    Google工程师打造Remix OS系统 桌面版安卓下载
    使用angular封装echarts
  • 原文地址:https://www.cnblogs.com/liujiangyi/p/2635840.html
Copyright © 2011-2022 走看看