0

ベクトル コンテナーに素数のリストを格納する関数があります。関数が呼び出されるたびに、コンテナーのサイズは同じままか、大きくなります。

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;
    }
}

この例でストレージが機能する理由がわかりません。このプログラムは依存していますか?

4

1 に答える 1

7

変数が静的であるため、機能します。

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

関数内でこのような変数を宣言すると、変数は関数呼び出し間で存続することを意味します。

技術的には、これは「静的ストレージ期間」(SSD) オブジェクトです。これらのオブジェクトは、プログラムが存続する限り存続します。ほとんどの SSD オブジェクトは、main() が呼び出される前に作成されます。しかし、関数の静的変数の場合、関数が初めて呼び出されるまで作成されませんでした。

于 2013-03-20T03:56:44.550 に答える