【发布时间】:2018-09-27 20:50:47
【问题描述】:
这显然是一个玩具示例,但假设我有一个 n 函数,如下所示:
void one(const int param) {
const auto func = [=](){ return 13 == param; };
}
void two(const int param) {
const auto func = [=](){ return 13 == param; };
}
等等;它们都有相同的捕获 lambda。是否有可能有 1 个 lambda 实例,它总是捕获它所在函数的 param,而不是 n 个实例?也许作为我应该问的后续问题,编译器是否已经识别复制并将它们简化为单个实例?
【问题讨论】:
-
我不知道编译器能不能把它优化掉,但是如果你需要大量重用一个函数,仅仅命名它并正常使用它不是有意义吗?匿名函数是一次性的,而不是多个使用实体。
-
@kabanus 我需要它来捕获 :( 函子作为参数传递给我不拥有的函数。因此它必须匹配以下形式:
functional<bool()> -
嗯,有一个我没有想到的用例。在您的示例中,您是否控制
one, two ...函数,然后您会调用otherNotOwnedFunc(func)?
标签: c++ lambda capture multiple-instances single-instance