首页 > 技术文章 > static关键字

creature-lurk 2021-08-27 20:03 原文

1.静态变量

  static修饰变量用于声明该变量为静态变量。

  1)函数中的静态变量

    当变量声明为static时,空间将在程序的生命周期内分配。即使多次调用该函数,静态变量的空间也只分配一次,前一次调用中的变量值通过下一次函数调用传递。这对于在C / C ++或需要存储先前函数状态的任何其他应用程序非常有用。因此,静态变量的值通过函数调用来传递。每次调用函数时,都不会对变量计数进行初始化。

  2)类中的静态变量

    由于声明为static的变量只被初始化一次,因为它们在单独的静态存储中分配了空间,因此类中的静态变量由对象共享。对于不同的对象,不能有相同静态变量的多个副本。也是因为这个原因,静态变量不能使用构造函数初始化。当我们声明类的成员为静态时,这意味着无论创建多少个类的对象,静态成员都只有一个副本。静态成员在类的所有对象中是共享的。如果不存在其他的初始化语句,在创建第一个对象时,所有的静态数据都会被初始化为零。我们不能把静态成员的初始化放置在类的定义中,但是可以在类的外部通过使用范围解析运算符 :: 来重新声明静态变量从而对它进行初始化。

2.类的静态成员函数 

  如果把函数成员声明为静态的,就可以把函数与类的任何特定对象独立开来。静态成员函数即使在类对象不存在的情况下也能被调用,静态函数只要使用类名加范围解析运算符 :: 就可以访问。静态成员函数只能访问静态成员数据、其他静态成员函数和类外部的其他函数。静态成员函数有一个类范围,他们不能访问类的 this 指针。您可以使用静态成员函数来判断类的某些对象是否已被创建。

  1)静态成员函数与普通成员函数的区别

    静态成员函数没有 this 指针,只能访问静态成员(包括静态成员变量和静态成员函数)。

    普通成员函数有 this 指针,可以访问类中的任意成员;而静态成员函数没有 this 指针。

推荐阅读