В чем разница между двумя фрагментами? - PullRequest
1 голос
/ 12 октября 2019

Мне нужно какое-то объяснение для [](int x){return x=x+5;}. Что означает [] (int x)

Я запустил varr.apply(incelemby5), где incelemby5 увеличивает элементы массива на 5. Получил те же результаты

varr1 = varr.apply([](int x){return x=x+5;});

int incelemby5(int x) {
    return x+5;
}

1 Ответ

3 голосов
/ 12 октября 2019

C ++ 11 представляет лямбда-выражение. Вы можете сразу создать объект функции (который имеет operator()). У каждой лямбды есть уникальное имя типа, так что компилятор может оптимизировать его проще, чем указатель функции, который является тем же именем типа для одной и той же сигнатуры.

Кстати, эти два примера будут иметь одинаковые эффекты, потому что x, который1-й аргумент лямбды не является ссылкой lvalue.

varr1 = varr.apply([](int x){return x=x+5;});
varr1 = varr.apply([](int x){return x+5;});
...