2017-03-22 6 views
1
int a = 3; 
auto f = [a] (int a) { return a > a; } 

Q:ローカル変数名aをキャプチャし、ラムダには異なる方法がありますか?C++ラムダはパラメータ名のようなローカル変数をキャプチャします

私はそれが外部のローカル変数aとは独立していることをパラメトリックaの範囲内にあると思いますが、このポインタの区別のようなものがあるかどうかを知りたいと思います。

答えて

3

コンパイラがラムダを処理するとき、基本的にインスタンス化する特別なクラスを作成します。実際のラムダ関数はoperator()関数になり、キャプチャされた変数はこの特殊クラスのメンバ変数になります。

つまり、通常のスコープ規則が適用されます。ローカル変数と引数はメンバ変数をシャドウします。

あなたのケースでは、aはキャプチャされた変数ではなく、引数です。

関連する問題