Cześć,
mam następujący fragment kodu.
enum class Colour
{
Red,
Blue,
Black
};
int main()
{
std::vector<std::pair<Colour, int>> vec;
vec.push_back(make_pair(Colour::Red, 5));
vec.push_back(make_pair(Colour::Blue, 10));
vec.push_back(make_pair(Colour::Black, 15));
Colour c = Colour::Blue;
auto foundItem = std::find_if(vec.begin(), vec.end(),
[&c](const std::pair<Colour, double>& vec)->bool {
return vec.first == c;
});
return 0;
}
W wyrażeniach lambda mamy capture list i parameter list. W przykładzie powyżej specjalnie w liście parametrów jest zdefiniowana para elementów z Color/double pomimo, że powinno być Colour/int. Dlaczego to działa, czy jest to na jakimś etapie w ogóle sprawdzane? Czy to powinno się kompilować? Bo się kompiluje i działa poprawnie.
Zmienna vec, nie została jawnie przekazana do wyrażenia lambda bo nie ma jej na capture list, natomiast jako, że lambda jest wywoływana w find_if to zakładam, że jest to robione niejawnie i tam wewnąrz vec jest przekazywany do wyrażenia jako parametr?