zoukankan      html  css  js  c++  java
  • C++中static用法详解

      作用
    1:修饰普通变量:
    2:修饰普通函数:
    3:修饰成员变量:
    4:修饰成员函数:
     
     
    一:c与c++共有的
    1:静态局部变量:用于函数内部修饰变量,这种变量的生存周期一直到程序关闭。
     
    int foo()
    {
        static int si = 1; //note:1
        int ci = 1; //note:2
        si += 1;
        printf("&si = %p	 si = %d	 &ci = %p	 ci = %d
    ", &si, si, &ci, ci);
        return si;
    }
     
    其中si的初始化,是在函数比调用的时候,才进行的初始化。
     
    静态局部变量与全局变量的区别:
        全局变量作用域不同,他不像静态局部变量作用域只在函数体内(需要验证)。但是生命周期一样的?
     
     
    2:静态局部变量与普通局部变量的区别:
    区别
    静态局部变量
    普通局部变量
    全局变量
    1
    在全局数据区分配内存
    在栈区分配内存
     
    2
    在程序首次执行到它的时候,进行首次初始化
    每次函数执行到它的时候都会被初始化
     
    3
    静态局部变量,一般在声明处初始化;没有显示的初始化,会被程序自动初始化为0
    局部变量如果不显示的初始化,那么就不会呗初始化。它的值可能是个随意值。
     
    4
    他驻留在全局数据区,生命周期知道整个程序运行结束(而不是函数运行结束);但是作用域只能在函数内,不能在函数外使用。
    局部变量在栈区,函数结束后立即释放
    作用域所有函数可用;
     
    3:静态全局变量
        定义在函数体外,用于修饰全局变量,表示该变量只在本文件可见。
        作用域:该文件内部。
        生存周期:整个程序运行期间。
     
    static int gsi = 1;//note:3
    int gi = 1; //note:4
    int gfoo()
    {
        gsi += 1;
        gi += 1;
        printf("gfoo &gsi= %p	 gsi = %d	 &gi= %p	 gi = %d
    ", &gsi, gsi, &gi, gi);
        return gsi;
    }
    在本文件中,无论调用几次,gi和gsi结果都是一样的。 但是static限定了变量的作用域,只能在本文件内。
        
    4:静态函数
        静态函数跟静态全局变量的作用类似,即静态函数不能被其他文件所用。
        其他文件可以定义相同名字的函数,不会发生冲突
        作用域:该文件内部
        生命周期:整个程序运行期间。
     
    二,C++独有的:
     
    1:静态数据成员
        生存周期:大于class的对象;
        静态数据成员是所有类的对象共有一份;普通数据成员是每一个类的对象有一份 且相互无关联。
     
    2:静态成员函数:
        静态函数属于类,不属于某个具体的对象。 访问方式可以通过类对象调用,也可以用类名::函数名进行访问。
  • 相关阅读:
    Scrapy 概览笔记
    Python 依赖版本控制 (requirements.txt 文件生成和使用)
    Python 虚拟空间的使用
    macOS 所有版本 JDK 安装指南 (with Homebrew)
    鉴权那些事
    Java 位运算符和 int 类型的实现
    ASP.NET Core 入门教程 5、ASP.NET Core MVC 视图传值入门
    如何做好一次知识或技术分享
    ASP.NET Core 入门教程 4、ASP.NET Core MVC控制器入门
    ASP.NET Core 入门教程 3、ASP.NET Core MVC路由入门
  • 原文地址:https://www.cnblogs.com/Jlord/p/12846608.html
Copyright © 2011-2022 走看看