Страницы

Поиск по вопросам

суббота, 7 декабря 2019 г.

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

#c_sharp #cpp #перекодировка


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

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


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


Ответы

Ответ 1



На C#: int s = ((Func)(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 за уточнение!)

Ответ 2



это новые штуки с++ - лямбды. Перепишем на более простой и привычный с++ int foo(int n) { int i = 1; while (n--) { i*=2; } return i; } int s = foo(n); по факту - просто считает 2 в степени n для положительных чисел. Для отрицательных... а там все плохо:)

Комментариев нет:

Отправить комментарий