我有一个将函数或可调用对象作为输入的结构:
struct House {
std::function<int()> colorSelector;
}
现在我这样赋值:
House getHouse() {
House h;
int color = 10;
h.colorSelector = [&]() {
return color;
}
return h;
}
我会遇到范围界定问题吗?至于getHouse返回后,color(局部变量)会被销毁吗?
最佳答案
Will I run into scoping issue?
是的。
您的 lambda 捕获 color
通过引用,并在 getHouse
之后返回,堆栈展开,并进一步访问 color
是未定义的行为。
你应该捕获 color
按值来避免此类问题。
h.colorSelector = [color]() {
return color;
}
如果需要引用相同的color
, 也许你想分配一个 std::shared_ptr<color>
某处,然后捕获它的拷贝。
关于c++ - 如果返回,lambda 会超出范围吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54225609/