C++ [=]在C+中是什么意思+;?
我想知道C++ [=]在C+中是什么意思+;?,c++,c++11,lambda,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); 表示将(T)作为参数获取的函数
[=]
做什么?这里有一个简短的例子
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);
表示将
(T)
作为参数获取的函数原型,返回类型T
?您所指的[=]
是lambda表达式捕获列表的一部分。这告诉C++,lambda表达式中的代码被初始化,以便lambda得到它创建时使用的所有本地变量的副本。这对于lambda表达式能够引用因子
和偏移量
是必要的,它们是函数内部的局部变量
如果将
[=]
替换为[]
,则会出现编译器错误,因为lambda表达式中的代码不知道变量偏移量
和因子
指的是什么。如果您这样做,许多编译器会给出很好的诊断错误消息,所以请尝试一下,看看会发生什么 这是一个捕获列表。使变量可用于lambda。您可以使用通过值复制的[=]
,或通过引用传递的[&]
。“这是必要的”-不需要这个确切的选项;我们还可以编写[&]
,[=offset,=input]
,等等@M.M-这不是捕获对局部变量的引用吗?@M.M.在这里使用引用捕获将是一个问题,因为这些局部变量的生命周期将在lambda返回后立即结束。您是对的,我们可以单独列出各个变量。您也可以使用不捕获任何内容的[]
。)这是一个奇怪的高度投票,似乎提出了3个不同的未经研究的问题,是我同意@underline_d的复制品-看起来一些点击在提高评级,对吗?:)这是高度评价,因为谷歌决定漏斗你这里如果你谷歌[1]意味着在C++,不知道字lambda甚至意味着什么。
std::function<T (T)>