Глючный код в туре для C ++ об инициализации вектора с переключателем в лямбда-выражении - PullRequest
0 голосов
/ 23 марта 2019

Я читаю Тур 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;

У меня вопрос: книга неправильная или я что-то упустил? Существует ли стандартный способ инициализации объекта путем непосредственного присвоения ему лямбды?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...