私は現在C++ 11 lambdasで遊んでいて、理解できない例が見つかりました。標準によると:私はこのコードが原因で変数を取り込むのコンパイルされませんことを期待していたhttp://ideone.com/t9emu5ローカルではないラムダとキャプチャ変数 - "ブロックスコープ"とはどういう意味ですか?
:ideoneで
int a = 10;
auto x = [a] { return 1;};
int main() {
int k = 5;
auto p = [k]{ return k; };
return 0;
}
コード:
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
をので、私は簡単な例を作成しました非ブロックスコープ(または、少なくともauto x = ...の部分がブロックスコープ内にないと考える)。しかし、コードはコンパイル中です - それは大丈夫ですか?
これは問題ありません - ブロックの範囲は何ですか?
は(私は現在、私は唯一のideoneサイトへのアクセスを持っているので、私が使用しているものコンパイラバージョンはよく分からない。
感謝を説明するために!
それはこのようになります
だから、どの範囲が非ブロックスコープですか? – matekm
@DanielFrey Huh?ブロックは複合文であり、名前空間は確かにブロックではありません。 [basic.scope.block]/1と[stmt.block] – dyp
@DyPを参照してください申し訳ありませんが、混乱しました。あなたは完全に正しいです! –