【发布时间】:2015-02-23 08:56:11
【问题描述】:
根据 C++11 标准,lambda 表达式可以使用封闭范围内的变量,通过捕获列表、参数列表或两者兼而有之。
那么,让我们看看相同代码的两个版本。
1) 带捕获
int x = 4;
cout << "With capture : Factorial of " << x << " = " << [x]() // <= Capture
{
int r = 1;
for (int i = x; i > 1; i--) r = r * i;
return r;
}() << endl;
2) 带参数
int x = 4;
cout << "With parameter: Factorial of " << x << " = " << [](int x) // <= Parameter
{
int r = 1;
for (int i = x; i > 1; i--) r = r * i;
return r;
}(x) << endl;
输出是:
With capture : Factorial of 4 = 24
With parameter: Factorial of 4 = 24
既然我们可以在参数列表中向 lambdas 传递参数(就像使用任何 C++ 函数一样),为什么我们需要捕获列表?
谁能告诉我参数列表不起作用而只有捕获列表起作用的情况?
【问题讨论】: