Tôi muốn tìm điểm, có toạ độ Y ít hơn (nếu có nhiều điểm như vậy, hãy tìm điểm có điểm X nhỏ nhất). Khi viết nó với lambda:lambda return bool
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();
}
Tôi nhận:
error C3499: a lambda that has been specified to have a void return type cannot return a value
sự khác biệt giữa những gì là:
// works
std::min_element(begin, end, [](PointAndAngle& p1, PointAndAngle& p2) {
return p1.first->y() < p2.first->y();
}
và
// does not work
std::min_element(begin, end, [](PointAndAngle& p1, PointAndAngle& p2) {
if (p1.first->y() < p2.first->y())
return true;
else
return false;
}
Cấu trúc 'if (expression) trả về true; khác trở về sai; 'về cơ bản là xấu. Hai lần như xấu xí nếu biểu thức thực sự là boolean. –
@ MichaelKrelin-hacker: Đúng, nhưng đó là _not_ tại sao trình biên dịch từ chối ví dụ cuối cùng. – MSalters
Những người thay thế, chắc chắn, đó là lý do tại sao bình luận và không trả lời. Đây là câu trả lời cho câu hỏi "sự khác biệt" là gì. Và đây là sự khác biệt chính;) –