我想找到 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/