[=]在C ++中意味着什么?

时间:2016-01-13 22:08:59

标签: c++ c++11 lambda

我想知道[=]的作用?这是一个简短的例子

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

2 个答案:

答案 0 :(得分:101)

您引用的nks是lambda表达式的捕获列表的一部分。这告诉C ++ lambda表达式中的代码被初始化,以便lambda获得它在创建时使用的所有局部变量的副本。这对于lambda表达式能够引用[=]factor是必要的,它们是函数内的局部变量。

如果将offset替换为[=],您将收到编译器错误,因为lambda表达式中的代码不知道变量[]offset指的是。如果你这样做,很多编译器会给出很好的诊断错误信息,所以试试看看会发生什么!

答案 1 :(得分:38)

它是lambda捕获列表。使变量可用于lambda。您可以使用[=]按值复制,或[&]按参考传递。