El código siguiente imprime 0, pero espero ver un 1. Mi conclusión es que las funciones lambda no se invocan al pasar efectivamente los parámetros capturados a las funciones, que es más intuitivo. ¿Estoy en lo cierto o me estoy perdiendo algo?C++ 11 Captura lambda por capturas de valor en el punto de declaración
#include <iostream>
int main(int argc, char **argv){
int value = 0;
auto incr_value = [&value]() { value++; };
auto print_value = [ value]() { std::cout << value << std::endl; };
incr_value();
print_value();
return 0;
}
gracias. Estaba pensando en valor-por, ya que las actualizaciones de valor no serán visibles fuera de la función. Sin embargo, parece que también significa que las actualizaciones fuera de la función no serán visibles dentro de la función. – perreal
Lo que podría ser engañoso aquí es la fraseología: por valor significa "generar una copia". La lambda tiene una copia de la variable, su valor se toma en el punto de declaración de la lambda. Como la lambda tiene una copia privada, el objeto original no se modifica ni se lee dentro de la lambda. Es por eso que hay una captura por referencia en realidad, para permitir que el caso que desea ver/modificar el original. – Klaim