Lambdas中的const参数

4 c++ lambda

如果我想做一个lambda类型std::function<void(const Foo&)>。为什么删除引用和论点的一致性是合法的?这是有效的:

std::function<void(const Foo&)> f = [](Foo) {
    // ...
};
Run Code Online (Sandbox Code Playgroud)

eer*_*ika 8

如果我想做一个lambda类型 std::function<void(const Foo&)>

该类型不是lambda,因此您不能拥有该类型的lambda。我想您的意思是,您想将lambda存储在该类型的函数包装中。

为什么删除引用和论点的一致性是合法的?

因为Foo(lambda的参数)可以从const Foo&(函数包装的参数)初始化。您也可以不使用lambda来执行此操作:

const Foo& ref{some_value};
Foo f {ref};
Run Code Online (Sandbox Code Playgroud)