#include <iostream>
#include <algorithm>
#include <vector>
int main()
{
// Block 1
{
auto inc = []() { int i = 0; return [&]() { return i++; }; }();
std::vector<int> v(10, 10);
std::generate(v.begin(), v.end(), inc);
for (auto i : v) std::cout << i << std::endl;
}
// Block 2
{
auto inc = []() { int i = 0; return [&]() { return i++; }; };
std::vector<int> v(10, 10);
std::generate(v.begin(), v.end(), inc());
for (auto i : v) std::cout << i << std::endl;
}
}
Nie jestem pewien, dlaczego te dwa bloki dają różne wyniki.C++ zamknięcie z lambda
Block 1: 32767 ... 32776
Block 2: 0 ... 10
I std::generate
generator (inc
) jest przekazywany przez wartość, więc wierzę powinno być w porządku, prawda?
Używam OS X.
Dzięki,
Należy zauważyć, że wyniki uzyskane powyżej kodu są niezdefiniowane, patrz poniżej.
Nie można odtworzyć, gcc v5.1.0 generuje to samo wyjście w obu przypadkach – Slava
Kompiluję z wersją 3.6.2. – Ling
Nieważne, to UB, więc konkretne wyjście nie ma znaczenia – Slava