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 which has a [=] capture will access the lambda's local copy.
Edit: I actually get the feeling that I am trying to access this pointer which is also captured from [=]. Therefore, accessing x from my code is like accessing this->x which is the same pointer as my original one. Please correct me if I'm wrong.