有关静态的用类定义的对象

img

img

img

img


为什么静态的对象只能输出一次,即函数只被调用了一次
而非静态的能够调用两次

这是C/C++中,static变量和自动变量的特性。

  • static变量存放在全局区,并非位于函数栈上,生命周期为初始化后会一直持续到程序结束。
    文件作用域的static变量会在main函数之前初始化;
    函数作用域的static变量会在函数第一次调用时初始化,之后的调用就会忽略。
  • 函数内定义非static变量,称为自动变量,位于函数栈上,生命周期为定义变量的所在函数范围。
    每次调用进入函数时,自动变量初始化;退出函数时,自动变量销毁。
// test.cpp
static int a = 1; // 文件作用域的static变量,会在main之前初始化

void test()
{
  static int b = 2; // 函数作用域的static变量,在第一次进入test时初始化一次
  int c = 3; // 自动变量:每次进入test,都初始化一次
  cout << "b = " << b++ << endl;
  cout << "c = " << c++ << endl;
}

int main()
{
  cout << "main" << endl;
  test();
  test();
  return 0;
}

这是c语言的语法,static修饰的变量只能初始化1次,然后编译器就会忽略掉该定义语句。