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

What does [=] mean in C++?

本文关键字:是什么 意思 C++      更新时间:2023-10-16

我想知道[=]做什么?以下是的一个简短示例

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

您所指的[=]是lambda表达式的捕获列表的一部分。这个命令告诉C++,lambda表达式中的代码已经初始化,这样lambda就可以在创建时获得它使用的所有局部变量的副本。这对于lambda表达式能够引用函数内部的局部变量factoroffset是必要的。

如果用[]替换[=],则会出现编译器错误,因为lambda表达式中的代码不知道变量offsetfactor指的是什么。如果这样做,许多编译器都会给出很好的诊断错误消息,所以请尝试一下,看看会发生什么!

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

我会用注释来提供这些信息,但我的声誉太低了。

在cpp20中,现在不赞成使用[=],而是使用[=,this]。

更多信息请点击此处:https://isocpp.org/files/papers/p0806r2.html

正如本网站所述"该更改不会破坏原本有效的C++20代码,并且可能出现从C++17中断的最早修订是C++23;

因此,在使用cpp20时,可以这样使用它:

  • [=]→[=,this]:按值的局部变量,按引用的类成员
  • [=]→[=,*this]:按价值计算的一切
  • [&]→[&,this]:引用的所有内容
  • [&]→[&,*this]:(这将是不寻常的)