[英]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表達式能夠引用factor
和offset
是必要的, factor
和offset
量是函數內部的局部變量。
如果將[=]
替換為[=]
[]
,則會出現編譯器錯誤,因為lambda表達式中的代碼將不知道變量offset
和factor
引用的內容。 如果你這樣做,很多編譯器會給出很好的診斷錯誤信息,所以試試看看會發生什么!
這是一個lambda捕獲列表。 使變量可用於lambda。 您可以使用[=]
按值復制,或[&]
通過引用傳遞。
我會使用評論來提供這些信息,但我的聲譽太低了。
在 cpp20 中使用 [=] 現已棄用 - 請改用 [=, this]。
更多信息在這里: https://isocpp.org/files/papers/p0806r2.html
正如本網站所述,“此更改不會破壞其他有效的 C++20 代碼,並且可能出現來自 C++17 的破壞的最早修訂版是 C++23。”
所以在使用 cpp20 時像這樣使用它:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.