我想知道[=]
做什么?下面是一个简短的示例
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条答案
按热度按时间vfhzx4xs1#
你所引用的
[=]
是lambda表达式的捕获列表的一部分,它告诉C++ lambda表达式中的代码被初始化了,这样lambda就可以得到它在创建时使用的所有局部变量的副本,这对于lambda表达式能够引用factor
和offset
是必要的,它们是函数中的局部变量。如果你用
[]
替换[=]
,你会得到一个编译器错误,因为lambda表达式中的代码不知道变量offset
和factor
引用的是什么。如果你这样做,许多编译器会给予很好的诊断错误消息,所以试试看会发生什么!vpfxa7rd2#
这是一个lambda捕获列表。使变量对lambda可用。你可以使用
[=]
按值复制,或者[&]
按引用传递。wpx232ag3#
我会用评论来提供这些信息,但我的声誉太低了。
在cpp20中,现在不建议使用[=],而是使用[=,this]。
更多信息请访问:https://isocpp.org/files/papers/p0806r2.html
正如本网站所述,“此更改不会破坏其他有效的C20代码,可能出现C17破坏的最早修订版是C++23。”
因此,在使用cpp20时,请按如下方式使用: