首頁 > 後端開發 > C++ > 主體

C 0x 中的 Lambda 會以值擷取始終恆定嗎?

Linda Hamilton
發布: 2024-10-30 19:42:30
原創
209 人瀏覽過

Is Lambda Capture by Value Always Constant in C  0x?

Lambda 以值擷取在 C 0x 中始終為常數?

嘗試透過引用捕獲值但修改其內容時會出現此問題lambda 表達式。預設情況下,編譯器將捕獲的值視為常數,確保它們保持不變。但是,某些場景可能需要對捕獲的值進行非常量存取。

了解按值捕獲:
在 C 0x 中,lambda 函數可以按值或按引用捕獲變數。按值擷取時,會在 lambda 範圍內建立變數的副本,從而允許在 lambda 內進行修改。但是,預設情況下,捕獲的副本被視為常數,從而防止對其進行修改。

救援的可變關鍵字:
要克服此限制,可以使用可變關鍵字。透過將 mutable 加入 lambda 的參數清單中,我們明確地將捕獲的值宣告為在 lambda 範圍內可修改。這允許對捕獲的值進行非常量訪問,解決了所提供的程式碼片段中描述的問題。

範例:
考慮以下程式碼,程式碼嘗試透過引用擷取值並呼叫非常量方法:

struct foo
{
bool operator () ( const bool & a )
{

return a;
登入後複製

}
};

int main()
{ foo afoo;

foo afoo;

bool
{
  afoo(true);
};
登入後複製


return 0;

}

在此程式碼中,將foo::operator() 設為const 可解決編譯問題。然而,直接在 lambda 表達式中使用 mutable 可提供更大的靈活性,並允許對捕獲的值進行非常量訪問,而無需修改原始聲明

以上是C 0x 中的 Lambda 會以值擷取始終恆定嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!