簡體   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