STLのgenerate_nアルゴリズムへの入力として次の構造体を使用しています。
struct GenerateNumber {
GenerateNumber () : i(0) {}
int operator () (void) {
return i++;
}
private:
int i;
};
このファンクターを使用するコードの例は次のとおりです。
std::vector <int> v1 (3);
std::vector <int> v2 (3);
GenerateNumber generateNumber;
std::generate_n (v1.begin (), 3, generateNumber);
std::generate_n (v2.begin (), 3, generateNumber);
ただし、結果として、を含むのではなく、との両方が含まv1れます。ブレークポイントを使用して、コンストラクターが1回だけ呼び出されることを確認しました(コンストラクターが2回以上呼び出されることは意味がないことはわかっていますが、とにかくチェックしました)。v2{0,1,2}v2{3,4,5}GenerateNumber
静的にすることでこれを解決できることは知っていiますが、この動作は理解できません。i連続する呼び出し間での値が保持されないのはなぜですか?