C ++ – 做什么?

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

 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)作为参数和返回typesT的函数原型?

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

如果用[]replace[=] ,那么会出现编译器错误,因为lambdaexpression式中的代码将不知道variablesoffsetfactor引用的内容。 如果你这样做,许多编译器会给出好的诊断错误信息,所以试试看看会发生什么!

这是一个lambda捕获列表。 使variables可用于lambda。 您可以使用[=]按值复制哪些副本,或者是通过引用传递的[&]