函数级静态变量初始化
在 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中文网其他相关文章!