C++ 为什么lambda采用变量';s初值

C++ 为什么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();

问题是为什么程序打印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();
    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::你能问为什么指定它这样做吗?你能问为什么指定它这样做吗?