В примере Страуструпа, что означает двоеточие в "возврате 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

Выглядит как простая опечатка. Вероятно, должно быть:

auto z3 =[y]() { return y ? 1 : 2; }

Обратите внимание, что, поскольку лямбда не принимает никаких параметров, паренсы являются необязательными. Вы можете использовать это вместо этого, если вы предпочитаете:

auto z3 =[y] { return y ? 1 : 2; }

Ответ 3

return 1: 2; это синтаксическая ошибка, это не правильный код

Правильное утверждение будет больше похоже на return (y)? 1: 2; return (y)? 1: 2; вместо.