2011-08-02 40 views
6

Nếu tôi có một hàm xác định một lambda, thì lamda sẽ được 'xây dựng' mỗi khi hàm được gọi? Tôi có nên làm cho nó tĩnh để ngăn chặn điều đó?Tôi có nên làm lambdas tĩnh không?

void func(int x) 
{ 
    static auto lambda = [&x](int y) -> bool { 
     // ... 
    }; 
} 

Trả lời

6

Không, đừng tĩnh, vì nó nắm bắt biến cục bộ bằng cách tham chiếu.

Tôi không biết chi phí xây dựng lambda là bao nhiêu. Nếu bạn nghi ngờ nó là một vấn đề hiệu suất: điểm chuẩn.

+0

Ồ, đúng vậy. Điều gì sẽ xảy ra nếu nó không ghi lại biến bằng cách tham chiếu? –

+3

Nếu lambda đủ lớn để đảm bảo những lo lắng này, bạn chỉ có thể làm cho nó trở thành một chức năng toàn cầu và chuyển giá trị được ghi lại như một đối số bổ sung. –

+0

@Kerrek SB: Không lớn lắm, tôi chỉ tò mò thôi. –

Các vấn đề liên quan