Attualmente sto giocando con lambda di C++ 11 e ho trovato un esempio che non riesco a capire. Secondo la norma:Variabili lambda non locali e variabili di cattura: cosa significa "ambito di blocco" significa
A lambda-expression whose smallest enclosing scope is a block scope (3.3.3) is a local lambda expression; any other lambda-expression shall not have a capture-list in its lambda-introducer
così, ho creato esempio banale:
int a = 10;
auto x = [a] { return 1;};
int main() {
int k = 5;
auto p = [k]{ return k; };
return 0;
}
Il codice in Ideone: http://ideone.com/t9emu5
mi aspettavo che questo codice non viene compilato a causa della cattura variabile scope non-block (o almeno pensare che la parte auto x = ... non sia nel block-scope). Ma il codice è in fase di compilazione - va bene?
Se va bene, qual è lo scopo del blocco?
(non sono sicuro di quale versione del compilatore che usare perché al momento ho accesso solo al sito Ideone.
Grazie per la spiegazione!
quindi, quale ambito è l'ambito non di blocco? – matekm
@DanielFrey Huh? Un blocco è un'istruzione composta e uno spazio dei nomi non è certamente un blocco. Vedi [basic.scope.block]/1 e [stmt.block] – dyp
@DyP Spiacente, mi sono confuso. Hai completamente ragione! –