学习机器人编程ROS -第二版
在C和C++中,static都有两种基本的含义,并且这两种含义经常是互相有冲突的:
-
在固定的地址上分配,也就是说对象是在一个特殊的静态数据区上创建的,而不是每次函数调用时在堆栈上产生的。这也是静态存储的概念。
-
对一个特定的编译单位来说是本地的(就像我们在后面将要看到的,这在C++中包括类的范围)。这里static控制名字的可见性,所以这个名字在这个单元或类之外是不可见的。这也描述了连接的概念,它决定连接器将看到哪些名字。本节将着重讨论static的这两个含义,这些都是从C中继承来的。
9.1.1 函数内部的静态变量
通常,在函数体内定义一个变量时,编译器使得每次函数调用时堆栈的指针向下移一个适当的位置,为这些内部变量分配内存。如果这个变量有一个初始化表达式,那么每当程序运行到此处,初始化就被执行。然而,有时想在两次函数调用之间保留一个变量的值,我们可以通过定义一个全局变量来实现这点,但这样一来,这个变量就不仅仅受这个函数的控制。
C和C++都允许在函数内部创建一个static对象,这个对象将存储在程序的静态数据区中,而不是在堆栈中。这个对象只在函数第一次调用时初始化一次,以后它将在两次函数之间保持它的值。比如,下面的函数每次调用时都返回一个字符串中的下一个字符。
更多关于静态成员变量和静态成员函数的内容,可以查看 C++静态成员函数与静态成员变量小结 和 C++类中的静态成员变量和静态成员函数的作用。如果你还对C语言中的静态变量和静态函数有兴趣,可以阅读 C语言静态变量和静态函数。
至于PHP中的静态成员变量和非静态成员变量的区别,你可能会发现 PHP静态成员变量 很有帮助。如果你想了解更多关于静态方法和静态成员变量的调用,可以参考 静态方法静态成员变量的调用。这些资源会帮助你更深入地理解和掌握静态成员的应用。