Ответ 1
Это опечатка. Посмотрите на исправления для 2-й и 3-й распечаток языка программирования C++. Пример должен быть как ниже:
auto z3 =[y]() { return (y) ? 1 : 2; }
Я не понимаю одно конкретное использование толстой кишки.
Я нашел его в книге "Язык программирования C++" Бьярна Страуструпа, 4-е издание, раздел 11.4.4 "Звони и возвращайся", стр. 297:
void g(double y)
{
[&]{ f(y); } // return type is void
auto z1 = [=](int x){ return x+y; } // return type is double
auto z2 = [=,y]{ if (y) return 1; else return 2; } // error: body too complicated
// for return type deduction
auto z3 =[y]() { return 1 : 2; } // return type is int
auto z4 = [=,y]()−>int { if (y) return 1; else return 2; } // OK: explicit return type
}
Запутанная двоеточие появляется в строке 7, в операторе return 1: 2
. Я понятия не имею, что это может быть. Это не ярлык или троичный оператор.
Это похоже на условный троичный оператор без первого члена (и без ?
), Но в этом случае я не понимаю, как это может работать без условия.
Это опечатка. Посмотрите на исправления для 2-й и 3-й распечаток языка программирования C++. Пример должен быть как ниже:
auto z3 =[y]() { return (y) ? 1 : 2; }
Выглядит как простая опечатка. Вероятно, должно быть:
auto z3 =[y]() { return y ? 1 : 2; }
Обратите внимание, что, поскольку лямбда не принимает никаких параметров, паренсы являются необязательными. Вы можете использовать это вместо этого, если вы предпочитаете:
auto z3 =[y] { return y ? 1 : 2; }
return 1: 2;
это синтаксическая ошибка, это не правильный код
Правильное утверждение будет больше похоже на return (y)? 1: 2;
return (y)? 1: 2;
вместо.