簡體   English   中英

在 lambda 表達式中使用 std::atomic

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM