首页 >后端开发 >C++ >C 中函数级静态变量何时初始化?

C 中函数级静态变量何时初始化?

Linda Hamilton
Linda Hamilton原创
2024-11-15 09:39:03343浏览

When are function-level static variables in C   initialized?

函数级静态变量初始化

在 C 中,函数级静态变量是维护函数内状态的有用机制。然而,它们的分配和初始化过程有时会引起问题。

与在程序启动时分配和初始化的全局声明变量不同,函数级静态变量直到第一次调用函数时才会分配或初始化.

考虑以下代码片段:

void doSomething()
{
  static bool globalish = true;
  // ...
}

在此示例中,静态变量 globalish 将不会被分配或初始化,直到调用函数 doSomething()。为了演示这一点,让我们分析一个测试程序:

#include <iostream>

class test
{
public:
  test(const char *name) : _name(name)
  {
    std::cout << _name << " created" << std::endl;
  }

  ~test()
  {
    std::cout << _name << " destroyed" << std::endl;
  }

  std::string _name;
};

test t("global variable");

void f()
{
  static test t("static variable");
  test t2("Local variable");

  std::cout << "Function executed" << std::endl;
}

int main()
{
  test t("local to main");

  std::cout << "Program start" << std::endl;

  f();

  std::cout << "Program end" << std::endl;
  return 0;
}

编译和执行后,输出显示函数 f() 中静态变量 t 的构造函数不会被调用,直到调用该函数第一次:

global variable created
local to main created
Program start
static variable created
Local variable created
Function executed
Local variable destroyed
Program end
local to main destroyed
static variable destroyed
global variable destroyed

因此,函数级静态变量不会在程序启动时分配或初始化,而是在第一次调用它们所在的函数时分配或初始化已定义。

以上是C 中函数级静态变量何时初始化?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn