mercredi 1 juillet 2015

Using lambda expression's by value capture

Quick query regarding usage of lambda captures, particularly about "by value capture". Here is my code:

class carl{
public:
    int x;      
    void sayhi();
};


void carl::sayhi(){

    auto c1 = [=](){            //capture by value
    std::cout<<&x<<std::endl;   
    x = 10;                     // access the copy?
    };

    c1();
    std::cout<<&x<<std::endl;   // same address as the one inside lambda
    std::cout<<x<<std::endl;    //prints 10 now WHY????
}

int main(int argc, char** argv) {

carl x;
x.sayhi();

return 0;
}

My issue is that, are "by value" captures in lambda supposed to affect the original? aren't they supposed to make a copy? From my example, i used [=] so my lambda will make a copy of the variable within that class's scope. I tried accessing x and it directly altered x's original value. I tried researching about it and from my own words: it's stated that accessing a variable inside a lambda who has a [=] capture will access the lambda's local copy.

Aucun commentaire:

Enregistrer un commentaire