#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;
}
}
왜 두 블록이 다른 결과를 생성하는지 잘 모르겠습니다. 람다를 사용하는 C++ 클로저
Block 1: 32767 ... 32776
Block 2: 0 ... 10
그리고 std::generate
발전기 (inc
) 값에 의해 전달, 그래서 그것을 바로 괜찮을 것으로 판단됩니다에 대한
감사를 실행하고
, 코드 위의 결과는 정의되지 않은 것을
참고, 아래를 참조하십시오.
gcc v5.1.0은 두 경우 모두 동일한 출력을 생성합니다. – Slava
clang 버전 3.6.2로 컴파일 중입니다. – Ling
신경 쓰지 마라. 그것은 UB 다. 그래서 특별한 출력은 무의미하다. – Slava