static修饰全局变量时,表明一个全局变量只对定义在同一文件中的函数可见
表明该变量的值不会因为函数终止而丢失
表明该函数只在同一文件中调用
static 修饰类中的成员变量时,表明对该类所有对象这个数据成员都只有一个实例,即该实例归所有对象共有
类的静态变量必须在类外被初始化,类的静态变量可以直接通过类名调用,也可以通过实例化的对象名调用
#include <iostream> using namespace std; class A { public: static int x; }; int A::x = 10; // 不初始化会报错 int main() { A a; cout << A::x << ", " << a.x << endl; A::x = 20; cout << A::x << ", " << a.x << endl; }
类中的静态成员为prevate时,只能通过类中的公有方法调用:
#include <iostream> using namespace std; class A { private: static int x; public: void print() { cout << x << endl; } }; int A::x = 10; // 不初始化会报错 int main() { A a; // A::x = 20; 报错 a.print(); }
如果把函数成员声明为静态的,就可以把函数与类的任何特定对象独立开来。静态成员函数即使在类对象不存在的情况下也能被调用,静态函数只要使用类名加范围解析运算符 :: 就可以访问。
静态成员函数只能访问静态成员数据、其他静态成员函数和类外部的其他函数。
静态成员函数有一个类范围,他们不能访问类的 this 指针
静态成员函数与普通成员函数的区别:
静态变量和静态函数在程序启动时就被创建了,分配在静态存储区/全局存储区中
原文:https://www.cnblogs.com/xumaomao/p/15091783.html