为什么"auto"不能作为 lambda 参数

Why "auto" is not acceptable as lambda parameter

本文关键字:lambda 参数 不能 auto 为什么      更新时间:2023-10-16

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

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

错误当然在"auto"?为什么不可能自动知道类型?由于

这是因为从c++ 11开始,c++中的lambda函数不能通用地定义,因此不能使用auto声明参数。

然而,您可以在c++ 11中使用decltype()实现同样的事情,在您的情况下:

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