c++关键字static的作用

1.隐藏

  当同时编译多个源文件(.cpp)时,在某一个源文件中用static修饰的全局变量或函数,对其他源文件是隐藏的

//1.cpp
int a = 5;
void fun()
{
    cout << 666 << endl;
}
static int b = 8;


//main.cpp
int main()
{
    extern int a;
    cout << a << endl;    //输出:5

    extern void fun();
    fun();                //输出:666

    extern int b;
    cout << b << endl;    //编译错误:b在1.cpp中是static的

    return 0;
}

2.static使局部变量也具有全局生存周期

1)静态全局变量,生存周期为整个程序,作用域为定义它的源文件内(隐藏)

2)静态局部变量,它的生存周期还是整个程序,但是作用域仅限于定义它的函数内,也就是说在其他函数中不能使用它

int fun()
{
    static int a = 10;//在第一次进入这个函数的时候,staticj局部变量a被初始化为10,这是a唯一的一次初始化
    --a;
    return a;
}

int main()
{
    cout << fun();
    cout << endl;
    cout << fun();
    cout << a << endl;//错误:不能在其他地方使用静态局部变量a

    return 0;
}
程序输出:
9
8

3.默认初始化变量为0

1)如果没有给static修饰的变量赋予初始值,则它将被默认初始化为0

2)全局变量也具备这一特性,某些时候这一特性可以减少程序员的工作量

4.c++中用static将类成员声明为静态成员

原文地址:https://www.cnblogs.com/Joezzz/p/10235207.html