#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;
}
}
Tôi không chắc chắn lý do tại sao hai khối này tạo ra các kết quả khác nhau.c + + đóng cửa với lambda
Block 1: 32767 ... 32776
Block 2: 0 ... 10
Và đối với std::generate
máy phát điện (inc
) được truyền theo giá trị, vì vậy tôi tin rằng nó nên được tốt, phải không?
Tôi đang chạy OS X.
Cảm ơn,
Lưu ý rằng các kết quả từ mã ở trên là không xác định, xem dưới đây.
Không thể tạo lại, gcc v5.1.0 tạo ra cùng một đầu ra trong cả hai trường hợp – Slava
Tôi đang biên dịch với phiên bản tiếng kêu 3.6.2. – Ling
Nevermind, đó là UB, do đó, đầu ra cụ thể là không thích hợp – Slava