【发布时间】:2017-08-14 05:24:23
【问题描述】:
int a = 3;
auto f = [a] (int a) { return a > a; }
Q:捕获局部变量名a和lambda有区别方法吗?
我认为是a范围内的一个参数是独立于外部局部变量a的,想知道有没有类似这个指针的区别。
【问题讨论】:
int a = 3;
auto f = [a] (int a) { return a > a; }
Q:捕获局部变量名a和lambda有区别方法吗?
我认为是a范围内的一个参数是独立于外部局部变量a的,想知道有没有类似这个指针的区别。
【问题讨论】:
当编译器处理一个 lambda 时,它所做的基本上是创建一个特殊的类来实例化。实际的 lambda 函数变成了operator() 函数,捕获的变量变成了这个特殊类的成员变量。
这意味着应用正常的作用域规则,局部变量和参数隐藏成员变量。
所以在您的情况下,a 是参数,而不是捕获的变量。
【讨论】: