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\t si = %d\t &ci = %p\t ci = %d\n", &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\t gsi = %d\t &gi= %p\t gi = %d\n", &gsi, gsi, &gi, gi);
    return gsi;
}

 

在本文件中,无论调用几次,gi和gsi结果都是一样的。 但是static限定了变量的作用域,只能在本文件内。
    
4:静态函数
    静态函数跟静态全局变量的作用类似,即静态函数不能被其他文件所用。
    其他文件可以定义相同名字的函数,不会发生冲突
    作用域:该文件内部
    生命周期:整个程序运行期间。
 
二,C++独有的:
 
1:静态数据成员
    生存周期:大于class的对象;
    静态数据成员是所有类的对象共有一份;普通数据成员是每一个类的对象有一份 且相互无关联。
 
2:静态成员函数:
    静态函数属于类,不属于某个具体的对象。 访问方式可以通过类对象调用,也可以用类名::函数名进行访问。
posted @ 2020-05-07 23:28  怎因一双媚眼惹尘埃  阅读(331)  评论(0编辑  收藏  举报