• c++ static理解


    最近在做c++选修课的论文,发现自己对很多基础的东西掌握的还是不好,比如在设计单件模式时用到的static静态变量时就遇到了些纠结的问题

    1~~~static定义类中的属性时

    1 class Single
    2     {
    3 
    4         public:
    5                         static int a;
    6         };
    7 Single::a = 1;

    使其变量为1.如果不设置初值的话默认为0,并且其值可以在任意地方修改

    int main(){
         Single s1;
         Single s2;
         std::cout<<Single::a<<s1.a<<s2.a;          //输出全部为1
         Single::a = 2;        
         std::cout<<Single::a<<s1.a<<s2.a;          //输出全部为2
         s1.a = 3;        
         std::cout<<Single::a<<s1.a<<s2.a;          //输出全部为3
         s2.a = 4;        
         std::cout<<Single::a<<s1.a<<s2.a;          //输出全部为4
         return 0;       
    }

    所以说其值可以在任意地方修改,当然首先也必须为public的。说明static物如其名,是静态的

    意思就是他在程序运行时只占一块内存空间,不是在每个类里都有一个副本

    2~~~static在定义类的函数类型时

    同static变量一样,他只存在一个内存,并且在程序运行初创建,所以他不可能访问到个个对象的属性,即不存在this指针

    所以在她的函数体内只能操作static的函数或者变量

    同时他也可以在没有类的初始化时用     类名::函数名(); 来进行操作~~这个大家都懂的。。不解释了

    3~~~在函数中定义static

    在类的函数中定义static的静态变量时

    void classname::functionname(int sta){
        static int s = sta; //只执行一次,即只在第一次定义,并划分内存空间,但是在函数执行完后还存在,所以不是在栈上申请的内存
        cout<<s;
    }
    int main(){
      classname c;
      c.functionname(2);  //输出2;
      c.functionname(3);  //没错~~还是输出2
      return 0;
    }

    上面的代码可以看出函数内定义的static变量只定义一次,且有一定的隐藏性(只能在这个函数体内操作)

  • 相关阅读:
    rsyslog日志服务器搭建
    使用原生js实现对table中的某个单元格进行编辑并提交后台修改数据
    使用vuex管理的状态数据在刷新页面后数据丢失的问题
    brew install mongodb
    brew安装与启动redis
    zsh设置代理
    DNS Rebinding漏洞原理
    防数据泄露_MySQL库和数据安全
    PHP代码审计_用==与===的区别
    MySQL提权 通过UDF
  • 原文地址:https://www.cnblogs.com/happyDays/p/2821530.html
Copyright © 2020-2023  润新知