【发布时间】:2018-11-07 23:52:57
【问题描述】:
将 lambda 存储在 std::function 与 auto variable 相比有什么优势。例如,在下面的代码中,我将 lambda 存储在 variable f1 而不是 std::function f。
#include <iostream>
#include <functional>
using namespace std;
void global_f() {
cout << "global_f()" << endl;
}
struct Functor {
void operator()() { cout << "Functor" << endl; }
};
int main() {
std::function<void()> f;
cout << "sizeof(f) == " << sizeof(f) << endl;
f = global_f;
f();
auto f1 = [](){ cout << "Lambda" << endl;};
f1();
Functor functor;
f = functor;
f();
}
【问题讨论】:
-
您可能会或可能不会提高性能,具体取决于 lambda,因为
std::function已被擦除。 -
没有优势,但有时你不知道你是否得到一个 lambda 或其他一些可调用的,
std::function可以包装的不仅仅是 lambdas -
如果你想存储一个函数对象并且你希望它有一个特定的签名是留给
std::function的少数用例之一。 -
@user463035818 闭包类型显式删除分配。一个 lambda 类型可以有多个值,例如,如果你从一个自动函数返回它,它们可以捕获不同的值
-
@user463035818 例如
auto make = [](int val){ return [val](){ std::cout << val; } }; auto one = make(1);添加one = make(1);会编译失败
标签: c++ lambda std-function