2013-03-21 75 views
5

Nhìn vào lambda mẫu này:C++ 11 lambdas và các dấu ngoặc vuông

[](int factor)->int{return factor*factor;} 

Ai có thể giải thích cho tôi những gì dấu ngoặc vuông trước của một biểu thức lambda C++ 11 là tốt cho?

+0

oops, bỏ qua nó. Nhưng cảm ơn anyways. – anhoppe

+1

Là một sang một bên, và không được đề cập trong các câu trả lời khác, '[]' cũng làm cho phân tích rằng có một biểu thức lambda ở đây thực sự dễ dàng: hãy tưởng tượng bối cảnh mà bạn có thể có một biểu thức lambda. Bạn có thể tưởng tượng một bối cảnh như vậy trong đó nó sẽ là hợp lệ để có một sử dụng khác nhau của '[' tại cùng một điểm? – Yakk

+0

hehe bạn nói đúng, tôi đoán đó là cái gì đó không đến với rất nhiều người (như tôi). Nhưng điểm tốt, tôi muốn nói. – anhoppe

Trả lời

6

Các dấu ngoặc vuông chỉ định biến nào được "bắt" bởi lambda và cách (theo giá trị hoặc tham chiếu).

Chụp có nghĩa là bạn có thể tham khảo biến bên ngoài lambda từ bên trong lambda. Nếu chụp theo giá trị, bạn sẽ nhận được giá trị của biến tại thời điểm lambda được tạo - tương tự như truyền tham số cho hàm theo giá trị. Nếu chụp theo tham chiếu, bạn sẽ có một tham chiếu đến biến thực sự bên ngoài lambda (và bạn cần phải chắc chắn rằng nó vẫn còn trong phạm vi).

Lưu ý rằng bên trong một lớp, bạn có thể nắm bắt "này" và sau đó gọi các phương thức lớp như bạn làm trong một phương thức lớp.

+0

Ok, câu hỏi đã thực sự đã được trả lời, xấu của tôi, nhưng cảm ơn bạn. – anhoppe

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