在 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 保证 copy/move 省略:
#include <atomic>
int main()
{
auto check = [a = std::atomic_int(42)]() mutable {
return a.fetch_sub(1) == 1;
};
}
我想在 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 保证 copy/move 省略:
#include <atomic>
int main()
{
auto check = [a = std::atomic_int(42)]() mutable {
return a.fetch_sub(1) == 1;
};
}