C ++ lambda捕获局部变量,如参数名称

时间:2017-03-22 08:02:21

标签: c++ lambda

int a = 3;
auto f = [a] (int a) { return a > a; }

问:捕获局部变量名a并且lambda有区别方法吗?

我认为它在参数a的范围内,独立于外部局部变量a,想知道是否有类似指针的区别。

1 个答案:

答案 0 :(得分:3)

当编译器处理lambda时,它所做的基本上是创建一个它实例化的特殊类。实际的lambda函数变为operator()函数,捕获的变量成为此特殊类中的成员变量。

这意味着应用正常的范围规则,其中局部变量和参数隐藏成员变量。

因此,在您的情况下,a是参数,而不是捕获的变量。