所以我想做的只是修改参数中传递的x值。
class B
{
public:
void DoSomething(function<void()> func)
{
func();
}
};
class A
{
public:
void Start(B* b, int* x)
{
auto func = [&x]()->void
{
x++;
cout << x;
};
b->DoSomething(func);
}
};
我尝试了各种各样的组合,但它不会起作用。 如果x值是一个值类型而不是一个指针,那么它就可以工作。
答案 0 :(得分:2)
x
仍然是lambda中的指针。
下面的代码应该有用。
auto func = [&x]()->void
{
(*x)++;
cout << (*x);
};
通过引用捕获意味着您可以修改原始x
的值,但它不会更改变量的类型。
如果通过引用捕获变量,则可以设置x
指向的地址。这是因为你有一个lambda内部原始指针的引用。按值捕获x
时,您可以创建它的副本。