想问一下为什么下面代码中的lamda表达式在值传递的情况下还是可以修改a的值并输出。
class A {
private:
int a = 1;
public:
int b = 1;
void fun() {
auto x1 = [=]() {b++; return ++a; };
int a = x1();
cout << a;
}
};
int main() {
A a;
a.fun();
}
VS2019运行结果
2
但是我在主函数中写就会报错
int main() {
int a;
int b;
auto x1 = [=]() {b++; return ++a; };//错误:表达式必须是可修改的左值
}