【问题标题】:Why "auto" is not acceptable as lambda parameter为什么不能接受“auto”作为 lambda 参数
【发布时间】:2015-12-15 06:27:34
【问题描述】:

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

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

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

【问题讨论】:

  • 可能的,但它不是 C++11 的一部分。然而,它是the C++14 standard 的一部分。
  • @JoachimPileborg 谢谢.. 我还没有阅读任何关于 C++ 14 版本的信息。不过,这个不错的能力,已经足够我继续前进了!

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


【解决方案1】:

这是因为从 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;

【讨论】:

  • 谢谢,decltype 是在编译时还是运行时?
  • "这将在C++14中加入" 嗯,C++14最新的C++标准。
  • @black 没错,改变了措辞。
  • “不能不”往往会互相抵消!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-15
  • 2015-04-16
  • 2020-06-22
  • 2023-03-27
  • 2019-07-23
  • 2022-09-23
相关资源
最近更新 更多