Я не понимаю одно конкретное использование толстой кишки.
Я нашел его в книге Бьярна Страуструпа « Язык программирования 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 ++ . Пример должен быть как ниже:
источник
(y)
и не простоy
?(cond) ? a : b
для ясности - это помогает мне избежать неправильного прочтения, например, утверждение,foo = x > y ? a : b
какfoo = x ...
при просмотре кода.Выглядит как простая опечатка. Вероятно, должно быть:
Обратите внимание, что, поскольку лямбда не принимает никаких параметров, паренсы являются необязательными. Вы можете использовать это вместо этого, если вы предпочитаете:
источник
return 1 : 2;
это синтаксическая ошибка, это не правильный кодПравильное утверждение будет больше похоже на это
return (y) ? 1 : 2;
.источник