Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/153.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ [=]在C+中是什么意思+;?_C++_C++11_Lambda - Fatal编程技术网

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)>