2011-08-02 8 views
6

Si tengo una función que define una lambda, ¿se 'construirá' la lamda cada vez que se llame a la función? ¿Debo hacerlo estático para evitar eso?¿Debo hacer Lambdas estático?

void func(int x) 
{ 
    static auto lambda = [&x](int y) -> bool { 
     // ... 
    }; 
} 

Respuesta

6

No, no lo haga estático, ya que captura una variable local por referencia.

No tengo idea de lo que es el costo de construir una lambda. Si sospecha que es un problema de rendimiento: punto de referencia.

+0

Oh, claro. ¿Qué pasa si no ha capturado la variable por referencia? –

+3

Si el lambda es lo suficientemente grande como para justificar estas preocupaciones, podría simplemente convertirlo en una función global y pasar el valor capturado como argumento adicional. –

+0

@Kerrek SB: No es grande, solo tenía curiosidad. –