神奇的static

来源:互联网 发布:php中添加按钮 编辑:程序博客网 时间:2024/06/03 13:04

C/C++中的static用法总结(一)

##static用来控制变量的存储方式可见性
函数内部定义的变量,在程序执行到它的定义处时,编译器为它在栈上分配空间。在函数执行结束后,分配的空间会被立即释放掉。如何在保障函数体内变量的私有性前提下,使该变量的值保存至下一次调用的时候呢?此static就派上了用场。当需要一个数据对象为整个类而不是某个对象服务,同时又力求不破坏的封装性,即要求此成员隐藏在成员的内部,对外不可见。
要想深入了解static的机制,就要理解静态与非静态变量:静态的成员存在于内存,非静态成员需要实例化才会分配内存。所有没有加static的成员都是非静态成员。话不多说,先上程序实例帮助理解:

#include<iostream>using namespace std;//含有静态变量的函数int func_1(void) {    static int static_para=0;    //上面这句话在func_1第i次调用不再被执行(i>1)    static_para++;    return static_para;}//不含有静态变量的函数int func_2(void) {    int no_static_para = 0;    no_static_para++;    return no_static_para;}int main() {    int i, j;    cout << "非静态" << "  " << "静态" << endl;    //设置循环,连续调用两个函数10次    for (int k = 0; k < 10; k++) {        j = func_1();        i = func_2();        cout <<i<<"        "<<j<<endl;    }    return 0;}

程序运行的结果:

Bean2017-2-15

1 0