首頁 >後端開發 >C++ >C 0x 中的 Lambda 會以值擷取始終恆定嗎?

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

Linda Hamilton
Linda Hamilton原創
2024-10-30 19:42:30296瀏覽

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中文網其他相關文章!

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