[=] 在 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 表达式能够引用 factor
和 offset
所必需的,它们是函数内部的局部变量。
如果将[=]
替换为[]
,则会出现编译器错误,因为lambda 表达式中的代码不知道变量offset
和factor
指的是什么。如果您这样做,许多编译器都会给出很好的诊断错误消息,所以请尝试一下,看看会发生什么!
【讨论】:
"这是必要的" - 这个确切的选项不是必需的;我们也可以写[&]
、[=offset, =input]
等。
@M.M - 这不是捕获对本地人的引用吗?
@M.M.在此处使用引用捕获将是一个问题,因为一旦返回 lambda,这些局部变量的生命周期就会结束。不过,您是对的,我们可以单独列出各个变量。【参考方案2】:
这是一个lambda 捕获列表。使变量可用于 lambda。您可以使用按值复制的[=]
,或按引用传递的[&]
。
【讨论】:
您也可以使用[]
,它不会捕获任何内容。 :)以上是关于[=] 在 C++ 中是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章