限定作用域 + 保持变量内容持久化
静态成员
#include <iostream>
using namespace std;
class Box {
public:
 static int Count;
 Box() {
     Count++;
 }
};
int Box::Count = 0;
int main(void) {
 Box Box1 = Box();
 Box Box2 = Box();
 cout << Box::Count << endl; // 2
 return 0;
}
静态成员函数
this 指针。您可以使用静态成员函数来判断类的某些对象是否已被创建。静态成员函数与普通成员函数的区别:
- 静态成员函数没有
this指针,只能访问静态成员(包括静态成员变量和静态成员函数);- 普通成员函数有
this指针,可以访问类中的任意成员。
#include <iostream>
using namespace std;
class Box {
public:
 static int Count;
 Box() {
     Count++;
 }
 static int getCount();  // 增加了类的访问权限的全局函数
};
// 实现的时候不需要 static,因为 static 是声明性关键字
int Box::Count = 0;
int Box::getCount() {
 return Count;
}
int main(void) {
 cout << Box::getCount() << endl;    // 0
 Box Box1 = Box();
 Box Box2 = Box();
 cout << Box::getCount() << endl;    // 2
 return 0;
}
只在 cpp 内有效的全局变量 static int val = 0;
cpp 内有效,其他的 cpp 文件不能访问这个变量cpp 文件声明了同名的全局静态变量,那么他们实际上是独立的两个变量;只在 cpp 内有效的全局函数
static 修饰,那么这个函数只可在本 cpp 内使用,不会同其他 cpp 中的同名函数引起冲突;static 的全局函数,不要在 cpp 内声明非 static 的全局函数,如果你要在多个 cpp 中复用该函数,就把它的声明提到头文件里去,否则 cpp 内部声明需加上 static 修饰;