#include <vector>
#include <algorithm>
void foo(int)
{
}
int main()
{
std::vector<int> v({ 1,2,3 });
std::for_each(v.begin(), v.end(), [](auto it) { foo(it+5); });
}
Khi biên soạn, ví dụ trên bắt đầu ra lỗi như thế này:Sử dụng auto trong một hàm lambda
h4.cpp: In function 'int main()':
h4.cpp:13:47: error: parameter declared 'auto'
h4.cpp: In lambda function:
h4.cpp:13:59: error: 'it' was not declared in this scope
Liệu nó có nghĩa là từ khóa auto
không nên được sử dụng trong các biểu thức lambda?
này hoạt động:
std::for_each(v.begin(), v.end(), [](int it) { foo(it+5); });
Tại sao phiên bản với từ khóa tự động không hoạt động?
Tôi nghĩ rằng ngay cả khi nó là một lambda, nó vẫn làm việc như một chức năng, và phải có chữ ký. Với tính năng tự động bạn cho phép trình biên dịch quyết định loại, vì vậy lambda của bạn không có chữ ký thực cho đến khi biên dịch. – Geoffroy
Chúng tôi thực sự cần lambdas đa hình (mẫu ẩn AKA) trong tiêu chuẩn tiếp theo. Câu hỏi này chỉ là một trong nhiều trường hợp mà mọi người chỉ cho rằng 'auto' hoạt động theo cách này. Tôi thấy không có lý do nó không nên. –
deft_code, tôi ở bên bạn.Nó là một trường hợp sử dụng hợp lý cho tự động. – Robert