在 C++ 中static类型:

        static可以限定变量或函数为静态存储。static限定的变量或函数不会和同一程序中其他文件同名的相冲突。如果用static限定内部变量,则该变量从程序一开始就用有内存,不会随其所在函数的调用和退出而分配和消失。其声明的对象的作用域限定为被编译源文件的的剩余部分。

        静态函数会被自动分配在一个一直使用的存储区,直到程序结束才从内存消失,避免调用函数时压栈出栈,速度快很多;其他文件可以定义相同名字的函数,不会发生冲突

1.局部静态变量:令局部变量的生命周期贯穿函数调用及之后的时间,只在程序第一次执行到局部静态变量的定义语句时才初始化,直到整个程序结束时才销毁该变量

        通俗的来讲,在函数内定义了一个局部变量。他是一个局部变量,意味着这个变量不能在函数外调用,也不能被其他函数直接调用。他是一个静态变量,意味着他所在的函数就算调用完成后,他依旧存在,对他做出的修改依旧保留,直至程序结束。

        举个例子可以很好的说明他的作用:

void print(){

    static int s = 0;

    cout<< ++s<<endl;

}



int main(){

    for(int i = 0;i<10;++i)

    print();    

    return 0;

}

上面程序的输出结果为1~10的数字

2.全局静态变量:仅在当前文件下可见(使用)

举个例子,当前你的文件是a.cpp,与另外一个源文件b.cpp链接在一起,如果你在a.cpp中声明了一个全局静态变量

//a.cpp中
static int s = 0;

那么此时在b.cpp中即使已经声明过这个变量,也是无法使用这个变量的

//b.cpp中
extern int s;

意义就在于仅在当前文件可见,其他一同链接的文件不可见

全局变量相反,如在a.cpp中定义的全局变量,在其他一同链接的文件中声明(extern)后,文件中可见,可以使用该变量

3.静态函数:如果把函数声明为static类型,则该函数名除了对该函数声明的文件可见外,其他文件都无法访问

        其中很典型的一类就是静态成员函数,即定义在类内的静态函数,该函数属于整个类,而不属于某个实例化的对象,不与任何对象绑定。因此静态成员函数内部不能访问非静态成员变量和非静态成员函数,只能访问静态成员变量和其他静态成员函数。

        可以通过类名和域解析运算符(::)来直接调用静态函数

class Cat{
    public:
        static int mycat();
};
int Cat::mycat(){
}
int main(){
    int r = Cat::mycat();
    return 0;
}

        尽管静态成员函数不属于某个对象,也可以通过类的对象,引用或者指针来访问

class Cat{
    public:
        static int mycat();
};
int Cat::mycat(){
    return 1;
}
int main(){
    Cat cat1;
    Cat *cat2 = &cat1;
    int r;
    r = cat1.mycat();
    r = cat2->mycat();
    
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值