C ++ 11 представляет лямбда-выражение. Вы можете сразу создать объект функции (который имеет operator()
). У каждой лямбды есть уникальное имя типа, так что компилятор может оптимизировать его проще, чем указатель функции, который является тем же именем типа для одной и той же сигнатуры.
Кстати, эти два примера будут иметь одинаковые эффекты, потому что x
, который1-й аргумент лямбды не является ссылкой lvalue.
varr1 = varr.apply([](int x){return x=x+5;});
varr1 = varr.apply([](int x){return x+5;});