Dữ liệu loại tẩy xóa là trạng thái std::function
sẽ vẫn tồn tại miễn là std::function
hoặc các bản sao của nó hoạt động, có thể thông qua phân bổ đống.
Điều tương tự cũng không đúng với việc đóng cửa, chứa các biến bị bắt. Đó là một phần của trạng thái của đối tượng lambda và có thể chứa địa chỉ của cấu trúc dữ liệu trên ngăn xếp, sẽ biến mất khi hàm hiện tại trả về và biến số lfib
vượt quá phạm vi.
Hãy nhớ rằng bạn đã chụp lfib
bằng cách tham chiếu. Do đó, bất kỳ thay đổi nào đối với lfib
cho phần còn lại của hàm phải được hiển thị cho lambda (bao gồm nhưng không giới hạn đối với việc khởi tạo). Cách duy nhất mà trình biên dịch có thể quản lý theo cách tổng quát là lưu trữ địa chỉ của địa phương lfib
. Trong trường hợp cụ thể của bạn, nếu lfib
không được gán lại, trình biên dịch có thể lưu giá trị ngay sau khi khởi tạo thay vì tham chiếu. Nhưng nó không được đảm bảo, và thậm chí không có khả năng đặc biệt.
Nguồn
2013-07-24 12:53:40
Có. Không chắc. –
Đối với một chương trình có độ phức tạp thuật toán O (2^N), cơ chế của hàm gọi không quan trọng. – Cubbi
Tôi đã không hỏi về việc thực hiện fibbonachi, tôi đã được hỏi về std :: chức năng có thể mất tối ưu hóa chương trình. –