Ich spiele gerade mit C++ 11 Lambdas und fand ein Beispiel, das ich nicht verstehen kann. Gemäß dem Standard:Nicht lokale Lambda und Capturing-Variablen - was bedeutet "Block Scope" bedeutet
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
so, habe ich triviales Beispiel:
int a = 10;
auto x = [a] { return 1;};
int main() {
int k = 5;
auto p = [k]{ return k; };
return 0;
}
Der Code in ideone: http://ideone.com/t9emu5
Ich hatte erwartet, dass dieser Code aufgrund der Erfassung Variable nicht kompiliert werden in Nicht-Block-Bereich (oder zumindest denken, dass der Auto X = ... Teil nicht im Block-Bereich ist). Aber der Code kompiliert - ist es ok?
Wenn es in Ordnung ist - was ist der Block Umfang?
(Ich bin nicht sicher, welche Compiler-Version verwende ich zur Zeit, weil ich nur Zugriff auf ideone Website.
Dank für das zu erklären!
also, welcher Umfang ist nicht-Block-Bereich? – matekm
@DanielFrey Huh? Ein Block ist eine zusammengesetzte Anweisung und ein Namespace ist sicherlich kein Block. Siehe [basic.scope.block]/1 und [stmt.block] – dyp
@DyP Sorry, ich war verwirrt. Du hast vollkommen recht! –