[=]在C ++中是什么意思?


93

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

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)作为参数和返回类型获取的函数原型T


4
对于似乎会提出3个未研究的问题的东西,这是一个奇特的高票,它是《 C ++ 11中的lambda表达式
underscore_d

我同意@underscore_d-看起来有些点击在提升评分,对吧?:)
BitTickler '19

Answers:


108

[=]你指的是部分捕获列表为lambda表达式。这告诉C ++,lambda表达式内的代码已初始化,以便lambda获得创建时使用的所有局部变量的副本。为了使lambda表达式能够引用factoroffset,这是函数内部的局部变量,这是必需的。

如果更换[=][],你会得到一个编译器错误,因为lambda表达式中的代码将不知道什么变量offsetfactor参考。如果这样做,许多编译器会给出良好的诊断错误消息,因此请尝试一下,看看会发生什么!


13
“这是必需的”-不需要此确切选项;我们也可以写[&][=offset, =input]等等
MM

1
@MM-不会捕获对本地人的引用吗?
没用的2016年

5
@MM在这里使用引用捕获将是一个问题,因为这些局部变量的生存期将在返回lambda后立即结束。没错,不过我们可以单独列出各个变量。
templatetypedef

45

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


3
您还可以使用[]不捕获任何内容的代码。:)
Daniel Kamil Kozar
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.