2012-06-02 42 views
3

有人可以向我解釋爲什麼以下不起作用(testblub裏面的const)。由於test被我假設的值複製,所以我可以設置它,因爲它是仿函數本地的。在lambda中沒有按值分配拷貝

#include <memory> 

int main() 
{ 
    std::shared_ptr<bool> test; 
    auto blub = [test]() { 
     test = std::make_shared<bool>(false); 
    }; 

    return 0; 
} 

爲了使這一工作,首先我要介紹一個新shared_ptr,分配test然後我可以正常指定其他shared_ptr。 順便說一句:我正在使用鏗3.1

回答

7

因爲lambdas的operator()默認爲const。您需要使用mutable關鍵字,使其非const:

auto blub = [test]() mutable { 
    test = std::make_shared<bool>(false); 
}; 
+0

因此,通過'const'你的意思是所有捕獲的值是const的 - 或僅值的副本? – abergmeier

+0

就像用手寫的函數對象一樣,只有那些被值捕獲的函數。捕獲是lambda的成員,並且運算符聲明爲Result result()()const;' –