Я читаю Тур C ++ второе издание. В конце главы 6.3.3 приведен пример инициализации вектора лямбда-выражением с оператором switch. Код не компилируется.
Код в книге выглядит так:
vector<int> v = [&] {
switch (m) {
case zero:
return vector<int> (n);
case seq:
return vector<int> {p,q};
case cpy:
return arg;
}
};
...
Похоже, он определил здесь лямбду и непосредственно назначил ее vector<int> v
вместо вызова и присвоения возвращаемого значения. Я попытался изменить это на это, и это работает:
std::vector<int> v = ([&] () -> std::vector<int> {
switch (f) {
case Fruit::apple:
return std::vector<int> (1);
case Fruit::banana:
return std::vector<int> (2);
case Fruit::cherry:
return std::vector<int> (3);
case Fruit::dragonfruit:
return std::vector<int> (4);
}
return std::vector<int> (10);
})();
std::cout << v.size() << std::endl;
У меня вопрос: книга неправильная или я что-то упустил? Существует ли стандартный способ инициализации объекта путем непосредственного присвоения ему лямбды?