静态局部变量与静态函数作用
有些时候,在函数中是必须要使用static变量的,比如当某函数的返回值为指针类型时,则必须是static的局部变量的地址作为返回值,若为auto类型,则返回为错指针。
静态函数的分类
C++ 中的静态函数可以分为全局静态函数和类的静态函数。
类的静态函数
类的静态函数使用类名来访问,在函数体中不能访问非静态成员。
全局静态函数
全局静态函数与全局普通函数想对应。与全局静态变量和全局变量的关系相似,全局静态函数的可见域为定义它的文件,而全局普通函数可以通过extern + 函数名的形式在其它文件中调用它。
首先,静态函数只有当程序结束的时候才从内存消失,生命周期长。而非静态则是动态加载到内存,不需要的时候就从内存消失。
而调用类中的静态函数,无需创建对象就可以调用了,因为当类初始化的时候,就已经加载了静态函数,所以静态函数要比对象加载的早,对象只有被创建的时候才会在堆内存中创建空间。
另外,静态函数中不能使用非静态变量,静态方法不可以定义this,super关键字(因为静态比对象先加载,而this必须首先加载,所以导致冲突,不能使用);非静态函数可以访问静态变量。
静态成员函数的特点:
被类的所有的对象共有,不属于某一个对象。通过类名::就可以直接调用。
跟普通的成员函数比,没有隐藏的this指针作为参数。这一点可用于封装线程类。
静态成员函数只可以访问静态成员变量。
静态局部变量保存在全局数据区,而不是保存在栈中,每次的值保持到下一次调用,直到下次赋新值。
C++ Primer关于静态成员举了个例子,是说一个银行账户类需要一个数据成员来表示当前的利率。在这个类中,我们所希望的是利率与类相关联,而不是与类的每个对象相关联。这个时候就可以用静态成员函数,可以提高效率,而且一旦利率浮动,每个对象也能相应使用新的值。
还有一些场景是必须用静态成员函数的,普通成员函数会出错...
类的静态成员作用:
为了实现类的多个对象之间的数据共享