首頁  >  文章  >  後端開發  >  按值擷取時如何修改 C 0x Lambda 中擷取的值?

按值擷取時如何修改 C 0x Lambda 中擷取的值?

DDD
DDD原創
2024-11-04 13:44:02716瀏覽

How Can I Modify Captured Values in C  0x Lambdas When Capturing by Value?

按值捕獲Lambda:確保C 0x 中捕獲的非常量值

在C 0x lambda 表達式中按值捕獲時,捕獲的值值自動保持恆定。如果您需要修改 lambda 中捕獲的值,這可能會成為一個問題。

例如,考慮以下按值捕獲 struct foo 的 lambda:

<code class="cpp">struct foo {
  bool operator() (const bool &a) {
    return a;
  }
};

int main(int argc, char* argv[]) {
  foo afoo;

  auto bar = [=] () -> bool {
    afoo(true);
  };

  return 0;
}</code>

此程式碼將無法編譯,因為 foo 的 operator() 方法被宣告為 const。要解決此問題,您可以將operator()方法設為非const:

<code class="cpp">struct foo {
  bool operator() (bool &a) {
    return a;
  }
};</code>

但是,這並不總是一個理想的解決方案。在某些情況下,您可能希望按值捕獲值,但仍確保它不會在 lambda 內被修改。

要實現此目的,您可以使用 mutable 關鍵字。將 lambda 聲明為 [=] () 可變 -> bool,您允許 lambda 修改捕獲的值。

範例:

<code class="cpp">auto bar = [=] () mutable -> bool {
  afoo(true);
};</code>

在此範例中,lambda 現在可以修改捕獲的 afoo 對象,甚至儘管它是透過值擷取的。

以上是按值擷取時如何修改 C 0x Lambda 中擷取的值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn