21xrx.com
2024-12-23 01:06:03 Monday
登录
文章检索 我的文章 写文章
C++中静态变量的初始化时机是什么?
2023-07-01 04:59:11 深夜i     --     --
C++ 静态变量 初始化时机

C++中静态变量是在程序编译时就已经分配了空间,与普通变量不同,静态变量的生命周期与程序的运行周期相同。因此,静态变量的初始化时机也与普通变量不同。

在C++中,静态变量可以分为两种:静态局部变量和静态全局变量。对于静态局部变量,它们的初始化时机是在函数第一次被调用时,而不是在函数定义时。换句话说,静态局部变量的初始化是延迟到第一次使用它的时候进行的。例如:


int testFunction()

{

  static int staticVar = 10;

  cout << staticVar << endl;

  staticVar++;

}

int main()

{

  testFunction(); // 输出10

  testFunction(); // 输出11

  testFunction(); // 输出12

  return 0;

}

在这个例子中,静态局部变量staticVar会在第一次调用testFunction函数时初始化,并且在每次调用testFunction函数时保留上一次的值。

对于静态全局变量,它们的初始化时机也是在程序运行之前进行的。也就是说,在程序启动的时候,静态全局变量就已经被初始化了。例如:


//file1.cpp

#include <iostream>

using namespace std;

static int staticVar = 10;

int globalVar = 20;

void doSomething()

{

  cout << "globalVar is " << globalVar << endl;

  cout << "staticVar is " << staticVar << endl;

  staticVar++;

}

//file2.cpp

#include <iostream>

#include "file1.cpp"

using namespace std;

void doSomethingElse()

{

  doSomething();

}

int main()

{

  doSomethingElse();

  doSomethingElse();

  doSomethingElse();

  return 0;

}

在这个例子中,静态全局变量staticVar和普通全局变量globalVar被定义在了file1.cpp中。在file2.cpp中,调用了函数doSomethingElse,其中会调用doSomething函数。在doSomething函数中,会打印出当前staticVar和globalVar的值。由于静态全局变量的初始化时机是程序运行前,因此在第一次调用doSomething函数时就可以输出staticVar的值了。

总结来说,对于静态局部变量,它们的初始化时机是在第一次使用它们的时候;对于静态全局变量,它们的初始化时机是在程序运行前。了解静态变量的初始化时机对于写出正确的程序非常重要,需要特别注意。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复