函数内部的STL容器何时用c++保存其数据?

When does an STL container inside a function keep its data in C++?

本文关键字:保存 c++ 数据 何时用 内部 STL 函数      更新时间:2023-10-16

我有一个函数,在vector容器中存储质数列表。每次调用该函数时,容器大小保持不变或增加。

bool prime(int n)
{
    ...
    static vector<int> v;
    vector <int>::iterator Iter;
    ...
    v.push_back(n);
}

int main()
{
    int num = 0;
    for (int i = 2; i <= n; ++i) {
      if (prime(i)) {
        ++num;
    }
}

我不知道为什么存储工作在这个例子中。这个程序是依赖的吗?

它可以工作,因为变量是静态的:

   static vector<int> v;
// ^^^^^^

当你像这样在函数内部声明变量时,这意味着该变量在函数调用之间存在。

从技术上讲,这是一个"静态存储时间"(SSD)对象。这些对象和程序一样长。大多数SSD对象都是在main()被调用之前创建的。BUT在函数静态变量的情况下,它们直到第一次调用函数时才被创建