我刚开始用c ++编程这个静态变量/函数的概念对我来说并不清楚..为什么这个用过了,还有其他的替代方法!!!
答案 0 :(得分:6)
静态可能会有点混乱,因为它的含义略有不同,具体取决于它的使用位置。
全局声明的静态变量只能在该源文件中可见。
在本地声明的静态变量将保持其对该函数的连续调用的值(如在netrom的示例中)
静态成员变量不属于该类。
可以在不声明该类的实例的情况下使用在类中声明的静态函数。
答案 1 :(得分:2)
static关键字指定给定变量,函数或类的生命周期是应用程序范围的。就像拥有一个实例一样。
这个例子可以说明一下:
#include <iostream>
using namespace std;
void test() {
static int i = 123;
if (i == 123) {
i = 321;
}
cout << i << endl;
}
int main(int arg, char **argv) {
test();
test();
return 0;
}
输出结果为:
321
321
所以“i”只在遇到第一次时被初始化,可以这么说。但实际上它是在编译时为该函数分配的。之后,它只是在函数test()的范围内作为变量,但它是静态的,所以更改它会在以后对test()的所有调用中改变它。
但我建议您在此处详细了解:http://www.cprogramming.com/tutorial/statickeyword.html
答案 2 :(得分:1)
为什么我们必须在类中声明静态然后在类外分配值!
因为它在课堂上只是DECLARED,所以它并不是DEFINED。
类声明仅仅是对类的描述,在定义该类的对象之前不会分配任何内存。
如果可以在许多模块中定义类的实例,并且在许多地方分配内存,那么在哪里放置静态数据成员的一个实例?请记住,课程声明可以&amp;将包含在该应用程序的许多源文件中。
C ++有“ODR”(我坚持应该是“1DR”):“一个定义规则”。数据项可以多次DECLARED,但必须完全定义一次。当你在类之外分配值时,赋值部分实际上是无关紧要的,它是成员的重要定义:
class A
{
static int MyInt; // Declaration
};
int A::MyInt; // Definition