繁体   English   中英

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

[英]What does [=] mean in C++?

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

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

表示一个 function 原型,它获取(T)作为参数并返回类型T

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

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

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

我会使用评论来提供这些信息,但我的声誉太低了。

在 cpp20 中使用 [=] 现已弃用 - 请改用 [=, this]。

更多信息在这里: https://isocpp.org/files/papers/p0806r2.html

正如本网站所述,“此更改不会破坏其他有效的 C++20 代码,并且可能出现来自 C++17 的破坏的最早修订版是 C++23。”

所以在使用 cpp20 时像这样使用它:

  • [=] → [=, this]:局部变量按值,class个成员按引用
  • [=] → [=, *this]: 一切按值
  • [&] → [&, this]: 一切皆参考
  • [&] → [&, *this]:(这很不寻常)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM