c++ - lambda 返回 bool 值

标签 c++ visual-studio-2010 lambda

我想找到 Y 坐标较小的点(如果这样的点更多,找到 X 最小的那个)。 使用 lambda 编写时:

    std::min_element(begin, end, [](PointAndAngle& p1, PointAndAngle& p2) {
        if (p1.first->y() < p2.first->y())
            return true;
        else if (p1.first->y() > p2.first->y())
            return false;
        else 
            return p1.first->x() < p2.first->x();
    }

我得到:

error C3499: a lambda that has been specified to have a void return type cannot return a value

有什么区别:

    // works
    std::min_element(begin, end, [](PointAndAngle& p1, PointAndAngle& p2) {
        return p1.first->y() < p2.first->y();
    }

    // does not work
    std::min_element(begin, end, [](PointAndAngle& p1, PointAndAngle& p2) {
        if (p1.first->y() < p2.first->y())
            return true;
        else 
            return false;
    }

最佳答案

正如 Mike 所指出的,如果 lambda 的主体是单个 return 语句,则从该语句推断返回类型(参见 5.1.2/4)(感谢 Mike)。

std::min_element(begin, end, [] (const PointAndAngle & p1, const PointAndAngle & p2)
  -> bool 
 {
    if (p1.first->y() < p2.first->y())
         return true;
    else 
        return false;
}

注意->bool.

关于c++ - lambda 返回 bool 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7889087/

相关文章:

c++ - QLabel在调整大小时切断文本

c++ - 删除获取 AccessViolationException 的指针

visual-studio-2010 - Crystal 报表每页只显示一行

c# - Monodroid 隐藏和显示状态栏

c# - Visual C# Express 2010 注释代码块的快捷方式?

c++ - C++ 枚举中的数组

c++ - -Wpadded 警告的异常(exception)/排除

java - BiFunction 引用可以传递给需要功能接口(interface)的方法吗?

vb.net - 您如何看待 VB 10 中的多行 lambda

java - 如何从 EJB 捕获运行时异常?