W poniższym kodzie, z C ++ 17 {X0}}, konieczne jest return w predykatu porównania.

auto it = find_if(V.begin(), V.end(), [](int i) { return i == 1; });

W sytuacjach, w których typ powrotu lambda można wywnioskować (jak tutaj, gdzie działa jako predykat), wydawałoby się logiczne, aby móc mieć niejawny return z lambda, więc można po prostu napisać:

auto it = find_if(V.begin(), V.end(), [](int i) { i == 1; });

Czy to w jakiś sposób możliwe? Czy lambdas istnieją, których return - intent i return - Typ może być obsługiwany domyślnie, zgodnie z kontekstem użytkowania?

-1
youwouldbesurprised 7 październik 2020, 13:58

1 odpowiedź

Najlepsza odpowiedź

Był propozycja dla "skróconych" lambdas z składni:

auto it = find_if(V.begin(), V.end(), [](int i) => i == 1);
                                                ^^ abbreviated-lambda operator token

Jednak został to odrzucony dla wiele powodów, Szef wśród nich, że wprowadziłoby niezgodność dla lambdów, które mogłyby zwrócić odniesienie:

[](int* p) { return *p; } // returns `int`
[](int* p) => *p          // returns `int&`

Nadal jest zainteresowana krótszą składnią Lambda, więc może przyjść w pewnym momencie, ewentualnie z inną składnią.

2
ecatmur 7 październik 2020, 14:37