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。 您可以使用[=]
按值复制哪些副本,或者是通过引用传递的[&]
。