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

Hum*_*awi 3 c++ lambda auto c++11

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

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

当然在"自动"的错误?为什么不能自动知道类型?谢谢

syn*_*gma 7

这是因为从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;
Run Code Online (Sandbox Code Playgroud)

  • 这是编译时间. (3认同)