C++ - [=]做什么?

der*_*ord 91 c++ lambda c++11

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

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);
Run Code Online (Sandbox Code Playgroud)

如何使用代码[]而不是[=]

std::function<T (T)>
Run Code Online (Sandbox Code Playgroud)

意味着一个函数原型,它(T)作为参数和返回类型T

tem*_*def 106

[=]你指的是部分捕获列表为lambda表达式.这告诉C++ lambda表达式中的代码被初始化,以便lambda获取它在创建时使用的所有局部变量的副本.这是必要的lambda表达式,以便能够参照factoroffset,它们是在函数内部的局部变量.

如果替换[=]with [],则会出现编译器错误,因为lambda表达式中的代码不知道变量offsetfactor引用的内容.如果你这样做,很多编译器会给出很好的诊断错误信息,所以试试看看会发生什么!

  • "这是必要的" - 这个确切的选择是没有必要的; 我们也可以写`[&]`,`[= offset,= input]`等. (13认同)
  • @MM在这里使用引用捕获将是一个问题,因为这些局部变量的生命周期将在返回lambda时立即结束.你是对的,我们可以单独列出各个变量. (5认同)

kom*_*ten 42

这是一个lambda捕获列表.使变量可用于lambda.您可以[=]按值使用哪些副本,也[&]可以按引用传递.

  • 你也可以使用不捕获任何东西的`[]`.:) (3认同)