我想知道[=]
的作用?这是一个简短的例子
template <typename T>
std::function<T (T)> makeConverter(T factor, T offset) {
return [=] (T input) -> T { return (offset + input) * factor; };
}
auto milesToKm = makeConverter(1.60936, 0.0);
代码如何与[]
而不是[=]
一起使用?
我认为
std::function<T (T)>
表示函数原型,它将(T)
作为参数并返回类型T
?
答案 0 :(得分:101)
您引用的nks
是lambda表达式的捕获列表的一部分。这告诉C ++ lambda表达式中的代码被初始化,以便lambda获得它在创建时使用的所有局部变量的副本。这对于lambda表达式能够引用[=]
和factor
是必要的,它们是函数内的局部变量。
如果将offset
替换为[=]
,您将收到编译器错误,因为lambda表达式中的代码不知道变量[]
和offset
指的是。如果你这样做,很多编译器会给出很好的诊断错误信息,所以试试看看会发生什么!
答案 1 :(得分:38)
它是lambda捕获列表。使变量可用于lambda。您可以使用[=]
按值复制,或[&]
按参考传递。