ДВС! Помогите расшифровать фрагмент кода:
int s = [] (int n) { int i = 1; while(n--) i*=2; return i; }(n);
Что все это означает? особенно (n) и (int n) в круглых скобках после того как оно уже было объявлено в программе ранее? Спасибо
На C#:
int s = ((Func<int, int>)(k => { int i = 1; while (k-- != 0) i *= 2; return i; }))(n);
На русский:
int s
— объявить переменную s
типа int
...=
— ...и инициализировать её значением, равным...[]
— вот тут будет лямбда-функция, это типа функция, но записанная прямо здесь, а не отдельно(int n)
— список аргументов функции — один int
, назовём его n
{
— началось тело функции:
int i = 1;
— завели локальную переменную i
, инициализировали значением 1while(n--) i*=2;
— пока n
не равно 0, удвоить i
; после каждой проверки уменьшить n
return i;
— вернуть i
}
— а это тело функции закончилось(n)
— ...функцию вызываем с аргументом n
, и результатом вызова инициализируем переменную s
;
— конец объявления переменной s
. (Спасибо @GreenDragon за уточнение!)это новые штуки с++ - лямбды.
Перепишем на более простой и привычный с++
int foo(int n)
{
int i = 1;
while (n--) {
i*=2;
}
return i;
}
int s = foo(n);
по факту - просто считает 2 в степени n для положительных чисел. Для отрицательных... а там все плохо:)
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Задача поставлена следующим образом: создать класс умный указатель, с которым можно будет реализовать следующее:
Как в Qt можно реализовать меню "Окно" MDI-приложения, отражающее открытые внутренние окна и позволяющее переключаться между ними? Пока приходит...
написал простенький класс который работает как однопоточный http сервер, выдающий текущее время и дату, если обратиться по 1270
Когда я записываю цифру в переменную, цифра храниться до того момента, покуда я другое значение не запишу, а мне нужно сделать, чтоб старое...