lambda examples c++
Acceso a la variable constexpr dentro de la expresión lambda sin capturar (1)
En el siguiente ejemplo, puedo acceder a la variable constexpr
x
desde dentro de la lambda y
sin capturarla explícitamente. Esto no es posible si x
no está declarado como constexpr
.
¿Hay reglas especiales que se aplican a constexpr
para capturar?
int foo(auto l) {
// OK
constexpr auto x = l();
auto y = []{return x;};
return y();
// NOK
// auto x2 = l();
// auto y2 = []{ return x2; };
// return y2();
}
auto l2 = []{return 3;};
int main() {
foo(l2);
}
¿Existen reglas especiales que se apliquen a
constexpr
para capturar / acceder?
Sí, constexpr
variables constexpr
podrían leerse sin capturar en lambda :
Una expresión lambda puede leer el valor de una variable sin capturarla si la variable
- tiene un tipo de enumeración o integral no volátil y se ha inicializado con una expresión constante, o
- es constexpr y trivially copy constructible.