【发布时间】:2011-12-14 21:39:12
【问题描述】:
我想找到 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;
}
【问题讨论】:
-
if(expression) return true; else return false;的构造本质上是丑陋的。如果表达式真的是布尔值,则丑陋的两倍。 -
@MichaelKrelin-hacker:是的,但这不是编译器拒绝最后一个示例的原因。
-
MSalters,当然,这就是为什么评论而不是回答。这就是“有什么区别”这个问题的答案。这是主要区别;)
标签: c++ visual-studio-2010 lambda