c++ - 为什么不能接受 "auto"作为 lambda 参数

标签 c++ c++11 lambda auto

为什么这段代码会编译出错?

std::find_if(std::begin(some_list), std::end(some_list), [](const auto& item){
//some code
});

当然是“auto”的错误?为什么不可能自动知道类型? 谢谢

最佳答案

这是因为从 C++11 开始,C++ 中的 lambda 函数无法通用定义,因此您无法使用 auto 声明参数。这已被添加到 C++14 中(并且已经被一些编译器支持)。

但是,您可以在 C++11 中使用 decltype() 实现同样的事情,在您的例子中:

std::find_if(std::begin(some_list), std::end(some_list), [](decltype(*some_list.begin())& item){
        return item > 4;

关于c++ - 为什么不能接受 "auto"作为 lambda 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32646362/

相关文章:

c++ - 指针 "this"的地址在指向成员函数调用的指针内意外更改

c++ - 模板函数无法将 'int' 转换为 nullptr_t

android - 抱歉,未实现 : non-static data member initializers with C++11

C# : using lambda to GroupBy every collection elements

c++ - Push_back({ "George", 1 }) 和 Push_back(Student ("Jack", 10)); 有什么区别

c++ - 如果容器元素是指针,为什么允许我从 const_iterator 调用非 const 成员函数?

c++ - C++ 中的数组大小

c++ - 在函数调用中,为什么 nullptr 不匹配指向模板对象的指针?

c# - 是否可以使用 Lambda 表达式格式化查询结果?

selenium - 如何在 AWS Lambda 上使用 OESMesa 模拟 WebGL 内容?