c++ - 如果返回,lambda 会超出范围吗

标签 c++ lambda scoping

我有一个将函数或可调用对象作为输入的结构:

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/

相关文章:

c++ - 取消引用指向容器类成员的指针

c++ - glOrtho 不改变 2D 窗口中的坐标系?

c++ - 将指针转换为char指针以进行算术运算是否安全又可移植?

java - 如何有效地检测和删除扫描图像/文档中的引导线?

java - 为什么 Java 不提示模棱两可的调用?

java - 获取在封闭范围内定义的局部变量必须是最终的或有效的最终

c++ - 如何使用特征库进行 lu 分解 C++

c++ - lambda 可以代替 getter 吗?

r - 在编写 R 包时,使用 flowCore::transform 函数,我可以使用变量名作为文本并获取实际值吗?

Java - 错误 : cannot find symbol - presumably scoping issue