我有一个(希望)关于 lambda 表达式的简单问题:
#include <vector>
#include <algorithm>
//----------------------------------------------------------------
void DoSomething()
//----------------------------------------------------------------
{
std::vector<int> elements;
elements.push_back(1);
elements.push_back(2);
int ref = 1;
auto printhit = [=](int iSomeNumber)
{
if (ref == iSomeNumber)
{
printf("Hit: %d\n", iSomeNumber);
}
else
{
printf("No Hit: %d\n", iSomeNumber);
}
};
ref = 2;
std::for_each(elements.begin(), elements.end(), printhit);
}
现在,我的问题是:当我用 capture [=] 定义 printhit 时,它会打印“Hit: 1”。如果我通过引用 [&] 传递它,它会打印“Hit: 2”。我以某种方式期望,替换是在 for_each 中完成的,因此无论我如何授予对“ref”的访问权限,都会打印“Hit: 2”。
谁能给我解释一下?
谢谢,马库斯