Перевод с C++ на русский или C#

532
20 декабря 2016, 22:26

ДВС! Помогите расшифровать фрагмент кода:

int s = [] (int n) { int i = 1; while(n--) i*=2; return i; }(n);

Что все это означает? особенно (n) и (int n) в круглых скобках после того как оно уже было объявлено в программе ранее? Спасибо

Answer 1

На 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, инициализировали значением 1
    • while(n--) i*=2; — пока n не равно 0, удвоить i; после каждой проверки уменьшить n
    • return i; — вернуть i
  • } — а это тело функции закончилось
  • (n) — ...функцию вызываем с аргументом n, и результатом вызова инициализируем переменную s
  • ; — конец объявления переменной s. (Спасибо @GreenDragon за уточнение!)
Answer 2

это новые штуки с++ - лямбды.

Перепишем на более простой и привычный с++

int foo(int n)
{
   int i = 1;
   while (n--) {
     i*=2;
   }
   return i;
}
int s = foo(n);

по факту - просто считает 2 в степени n для положительных чисел. Для отрицательных... а там все плохо:)

READ ALSO
Умный указатель и массив

Умный указатель и массив

Задача поставлена следующим образом: создать класс умный указатель, с которым можно будет реализовать следующее:

311
Пункты меню &ldquo;Окно&rdquo; MDI-приложения

Пункты меню “Окно” MDI-приложения

Как в Qt можно реализовать меню "Окно" MDI-приложения, отражающее открытые внутренние окна и позволяющее переключаться между ними? Пока приходит...

434
Как добавить путь в REST API на QTcpSocket

Как добавить путь в REST API на QTcpSocket

написал простенький класс который работает как однопоточный http сервер, выдающий текущее время и дату, если обратиться по 1270

322
Как правильно умножить число на десять и прибавить другое число? [требует правки]

Как правильно умножить число на десять и прибавить другое число? [требует правки]

Когда я записываю цифру в переменную, цифра храниться до того момента, покуда я другое значение не запишу, а мне нужно сделать, чтоб старое...

420