Lambda 以值擷取在 C 0x 中始終為常數?
嘗試透過引用捕獲值但修改其內容時會出現此問題lambda 表達式。預設情況下,編譯器將捕獲的值視為常數,確保它們保持不變。但是,某些場景可能需要對捕獲的值進行非常量存取。
了解按值捕獲:
在 C 0x 中,lambda 函數可以按值或按引用捕獲變數。按值擷取時,會在 lambda 範圍內建立變數的副本,從而允許在 lambda 內進行修改。但是,預設情況下,捕獲的副本被視為常數,從而防止對其進行修改。
救援的可變關鍵字:
要克服此限制,可以使用可變關鍵字。透過將 mutable 加入 lambda 的參數清單中,我們明確地將捕獲的值宣告為在 lambda 範圍內可修改。這允許對捕獲的值進行非常量訪問,解決了所提供的程式碼片段中描述的問題。
範例:
考慮以下程式碼,程式碼嘗試透過引用擷取值並呼叫非常量方法:
struct foo
{
bool operator () ( const bool & a )
{
return a;
}
};
int main()
{
{ afoo(true); };
return 0;
以上是C 0x 中的 Lambda 會以值擷取始終恆定嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!