为什么 "auto" 作为 lambda 参数是不可接受的
Why "auto" is not acceptable as lambda parameter
为什么这段代码会编译出错?
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;
为什么这段代码会编译出错?
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;