静态函数/变量

时间:2011-03-04 15:04:50

标签: c++

我刚开始用c ++编程这个静态变量/函数的概念对我来说并不清楚..为什么这个用过了,还有其他的替代方法!!!

3 个答案:

答案 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