Acceso a la variable constexpr dentro de la expresión lambda sin capturar
En el siguiente ejemplo, puedo acceder a la variable constexpr
x
desde el interior de la lambda y
sin capturarla explícitamente. Esto no es posible si x
no se declara 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);
}
32
1 answers
¿Existen reglas especiales que se aplican a
constexpr
para capturar/acceder?
Sí, constexpr
las variables se pueden leer sin capturar en lambda :
Una expresión lambda puede leer el valor de una variable sin capturar it if the variable
- tiene el tipo const no volátil integral o enumeración y se ha inicializado con una expresión constante, o
- es constexpr y trivialmente copy construible.
32
Author: songyuanyao,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-05-09 07:29:48
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-05-09 07:29:48