static最基本的含义是:“位置不变的某个东西“,这里指的是内存中的位置或者文件中的可见性
1,在c和c++中,static的两种含义:
(1),静态存储。
(2),对一个特定的编译单元来说是本地的,这个名字在这个单元或类之外不可见。
2,static对象将存储在程序的静态存储区中,而不是在堆栈中。这个对象只在汉书第一次调用是初始化,其后不用再初始化。
3,对于静态对象的初始化,零赋值只对预定义对象有效,用户自定义的类型必须用构造函数初始化。
4,静态对象的析构函数在程序的main()函数退出时,或者标准c函数exit()调用时才被调用。在析构函数中调用exit()是很危险的,因为这样可能引起死循环。
5,静态对象的销毁是按它们初始化的相反顺序进行的。全局对象总是在main()执行之前被创建。如果一个包含静态对象的函数从没有被调用过,那么这个对象的构造函数就没有被执行,所以也就不会调用析构函数
6,一个被明确声明为static的对象或函数的名字对编译单元来说是局部变量,这些名字有内部连接。类声明和局部变量没有联接。
7,extern表示该名字对所有的编译单元是可见的,用static和extern限定的对象总是驻留在静态数据区
8,普通函数是外部连接的
9,类的静态成员拥有一块单独的存储区,而不管我们创建了多少个该类的对象,这就为这些了创建了一个通信的方法。
10,静态成员的定义必须出现在外部,而且只能有一次
11,一个类的静态常量可以被用作一个编译时常量
12,在局部类(在函数内部定义的类)中不能有静态数据成员。
13,静态成元函数:
(1),静态成元函数为该类的全体服务,而不是为类的部分对象服务;
(2),静态成员函数不能访问一般的数据成员,只能访问静态数据成员,并且只能调用静态成元函数。
14,为什么静态成元函数不能访问一般的数据成员,也不能调用普通的成员函数?
由于当前对象的地址是被隐藏的传递给被调用的函数的,由于静态成员函数不是某个对象独有的,所以没有this指针,所以无法调用调用普通成员函数,同样对普通成员变量的访问也用到了this指针。