为什么" auto"作为lambda参数是不可接受的

时间:2015-09-18 07:34:12

标签: c++ c++11 lambda auto

为什么这段代码会产生编译错误?

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

当然在#34; auto"?为什么不能自动知道类型? 感谢

1 个答案:

答案 0 :(得分:7)

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

但是,你可以使用decltype()在C ++ 11中实现相同的功能,在你的情况下:

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