Chcę znaleźć punkt, który ma mniejszą współrzędną Y (jeśli więcej takich punktów, znajdź ten z najmniejszym X). Pisząc ją lambda:Zwroty 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();
}
Dostaję:
error C3499: a lambda that has been specified to have a void return type cannot return a value
jaka jest różnica pomiędzy:
// works
std::min_element(begin, end, [](PointAndAngle& p1, PointAndAngle& p2) {
return p1.first->y() < p2.first->y();
}
i
// does not work
std::min_element(begin, end, [](PointAndAngle& p1, PointAndAngle& p2) {
if (p1.first->y() < p2.first->y())
return true;
else
return false;
}
Konstrukt 'if (wyrażenie) zwraca wartość true; else return false; 'jest zasadniczo brzydki. Dwa razy brzydko, jeśli wyrażenie jest naprawdę boolean. –
@ MichaelKrelin-hacker: To prawda, ale to _nie_, dlaczego kompilator odrzuca ostatni przykład. – MSalters
MSalters, na pewno, dlatego komentuję i nie odpowiadam. To jest odpowiedź na pytanie "jaka jest różnica". I to jest główna różnica;) –