[英]Use std::atomic in lambda expression
我想在 lambda 表達式中捕獲std::atomic
。 原子變量的生命周期必須與 lambda 相關聯,因此我無法通過引用捕獲,但我想避免堆分配。
如何修改以下代碼段以使其編譯並按預期運行?
#include <atomic>
int main()
{
std::atomic_int a{42};
auto check = [a] () mutable { return a.fetch_sub(1) == 1; };
// ^ error: call to deleted constructor of 'std::atomic_int'
}
您可以直接初始化捕獲並依賴 C++17 保證的復制/移動省略:
#include <atomic>
int main()
{
auto check = [a = std::atomic_int(42)]() mutable {
return a.fetch_sub(1) == 1;
};
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.