[=] 在 C++ 中是啥意思?

Posted

技术标签:

【中文标题】[=] 在 C++ 中是啥意思?【英文标题】:What does [=] mean in C++?[=] 在 C++ 中是什么意思? 【发布时间】:2016-04-19 02:20:17 【问题描述】:

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

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的函数原型?

【问题讨论】:

这是一个奇怪的高度投票的东西,似乎提出了 3 个不同的未研究问题,并且与 What is a lambda expression in C++11? 重复 我同意@underscore_d - 看起来有些点击正在提高评分,对吧? :) 它的评价很高,因为 GOOGLE 决定将您汇集到这里,如果您在 C++ 中搜索 [=] 的含义,甚至不知道 Lambda 这个词的含义。 【参考方案1】:

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

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

【讨论】:

"这是必要的" - 这个确切的选项不是必需的;我们也可以写[&amp;][=offset, =input]等。 @M.M - 这不是捕获对本地人的引用吗? @M.M.在此处使用引用捕获将是一个问题,因为一旦返回 lambda,这些局部变量的生命周期就会结束。不过,您是对的,我们可以单独列出各个变量。【参考方案2】:

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

【讨论】:

您也可以使用[],它不会捕获任何内容。 :)

以上是关于[=] 在 C++ 中是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章

[=] 在 C++ 中是啥意思?

“= 0”在 C++ 中是啥意思? [复制]

“|=”操作在C++中是啥意思?

(*var)[n] 在 C++ 中是啥意思

这个符号在 C++ 中是啥意思? [复制]

这个语句在c++中是啥意思?