Khi tôi viết một lambda với [=]
, điều đó có nghĩa là tất cả các biến cục bộ của tôi sẽ được sao chép vào các thành viên của cấu trúc được tạo hoặc tôi có thể giả định rằng chỉ những cái đó thực sự được sử dụng trong lambda? Ví dụ:Liệu [=] ngụ ý rằng tất cả các biến cục bộ sẽ được sao chép?
void f()
{
vector<int> v(10000);
const int n = 5;
const int DivByNCnt = count_if(istream_iterator<int>(cin), istream_iterator<int>(),
[=](int i)
{
return i % n == 0;
});
}
Điều nào sau đây, nếu có, là đúng?
- cả n và v sẽ được sao chép
- n sẽ được sao chép, v sẽ không
- n sẽ được sao chép, v có thể hoặc có thể không được sao chép tùy thuộc vào các thiết lập implmenentation/tối ưu hóa.
Giả sử vì lý do đó mà hàm tạo bản sao của vector có tác dụng phụ.
Không biết gì về ngữ nghĩa của C++ 11, bất cứ điều gì ngoại trừ chỉ 'n' bị bắt sẽ hoàn toàn điên rồ đối với ngữ nghĩa của mọi ngôn ngữ khác với chức năng ẩn danh hạng nhất và đúng đóng cửa. – Gian