C++ 为什么lambda采用变量';s初值
问题是为什么程序打印id:0,id:1,id:2,42 而不是id:42,id:43,id:44,45C++ 为什么lambda采用变量';s初值,c++,lambda,stl,C++,Lambda,Stl,问题是为什么程序打印id:0,id:1,id:2,42 而不是id:42,id:43,id:44,45 int main() { int id = 0; auto f = [id] () mutable { std::cout << "id: " << id << std::endl; ++id; // OK }; id = 42; f(); f(); f();
int main()
{
int id = 0;
auto f = [id] () mutable {
std::cout << "id: " << id << std::endl;
++id; // OK
};
id = 42;
f();
f();
f();
std::cout << id << std::endl;
return 0;
}
intmain()
{
int id=0;
自动f=[id]()可变{
std::cout因为id
是通过值捕获的,即它被复制。当lambda被声明时(即捕获发生时)id
的值为0
您可能希望将其更改为通过引用捕获
auto f = [&id] () {
// ^
std::cout << "id: " << id << std::endl;
++id;
};
auto f=[&id](){
// ^
std::cout因为id
是通过值捕获的,即它被复制。当lambda被声明时(即捕获发生时)id
的值为0
您可能希望将其更改为通过引用捕获
auto f = [&id] () {
// ^
std::cout << "id: " << id << std::endl;
++id;
};
auto f=[&id](){
// ^
std::你能问为什么指定它这样做吗?你能问为什么指定它这样做吗?