私は現在 c++11 ラムダで遊んでいて、理解できない例を見つけました。標準によると:
最小のエンクロージング スコープがブロック スコープ (3.3.3) であるラムダ式は、ローカル ラムダ式です。他のラムダ式は、そのラムダイントロデューサにキャプチャ リストを持ってはなりません
だから、私は簡単な例を作成しました:
int a = 10;
auto x = [a] { return 1;};
int main() {
int k = 5;
auto p = [k]{ return k; };
return 0;
}
ideone のコード: http://ideone.com/t9emu5
非ブロックスコープで変数をキャプチャするため、このコードはコンパイルされないことを期待していました(または、少なくとも auto x = ... 部分がブロックスコープにないと考えています)。しかし、コードはコンパイル中です - 大丈夫ですか?
大丈夫ですか - ブロックスコープは何ですか?
(現在、ideone サイトにしかアクセスできないため、使用しているコンパイラのバージョンはわかりません。
説明してくれてありがとう!