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式能够引用factor和offset是必要的, factor和offset量是函数内部的局部variables。
如果用[]replace[=] ,那么会出现编译器错误,因为lambdaexpression式中的代码将不知道variablesoffset和factor引用的内容。 如果你这样做,许多编译器会给出好的诊断错误信息,所以试试看看会发生什么!
这是一个lambda捕获列表。 使variables可用于lambda。 您可以使用[=]按值复制哪些副本,或者是通过引用传递的[&] 。