有几种方法可以将可调用对象作为参数传递或存储它们以备将来使用。您可以使用 operator()
创建一个类,您可以定义一个函数并将指针传递给它,而且,从 C++11 开始,您可以通过 []() 定义一个 lambda {}
语法。
我很欣赏 lambda 语法作为表达式中的快捷方式,例如 find_if
,它通常需要一个紧凑的可调用表达式。我对 lambda 不了解的是希望在声明点之外使用它们并冒着引入悬空引用等的风险。 C++ 已经有一种强大的方法来传递可调用对象,它比 lambda 更安全,在这种情况下,lambda 的紧凑表达式没有任何好处。
因此问题是:为什么 C++11 允许在声明 is 的函数或从它调用的函数之外使用 lambda(因此引入了悬空引用等风险)?您能否举例说明在声明函数之外保留 lambda 是可取的?
最佳答案
考虑一个注册为在未来事件发生时调用的函数。将它定义为 lambda 会很方便,但它必须超出其定义的范围:
例如
m_button->setOnClick(YOUR LAMBDA GOES HERE);
关于c++ - 为什么人们会在声明范围之外使用 lambda 或从声明范围调用的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35136754/