如何创建包含 std::atomic 的 std::pair?
How do you create a std::pair containing a std::atomic?
我不知道如何创建以下内容:
std::pair<std::atomic<bool>, int>
我总是得到
/usr/include/c++/5.5.0/bits/stl_pair.h:139:45: error: use of deleted function 'std::atomic::atomic(const std::atomic&)'
: first(__x), second(std::forward<_U2>(__y)) { }
我试过了
std::pair<std::atomic<bool>, int> pair = std::make_pair(true, 1); //doesn't work
std::pair<std::atomic<bool>, int> pair = std::make_pair({true}, 1); //doesn't work
std::pair<std::atomic<bool>, int> pair = std::make_pair(std::atomic<bool>(true), 1); //doesn't work
std::pair<std::atomic<bool>, int> pair = std::make_pair(std::move(std::atomic<bool>(true)), 1); //doesn't work
我知道 std::atomic 是不可复制的,那么你应该如何成对创建它呢?只是不可能吗?
你可以这样做:
std::pair<std::atomic<bool>, int> p(true, 1);
这使用 true
初始化原子第一个成员,没有任何无关的副本或移动。在 C++17 中,保证复制省略还允许您编写:
auto p = std::pair<std::atomic<bool>, int>(true, 1);
我不知道如何创建以下内容:
std::pair<std::atomic<bool>, int>
我总是得到
/usr/include/c++/5.5.0/bits/stl_pair.h:139:45: error: use of deleted function 'std::atomic::atomic(const std::atomic&)'
: first(__x), second(std::forward<_U2>(__y)) { }
我试过了
std::pair<std::atomic<bool>, int> pair = std::make_pair(true, 1); //doesn't work
std::pair<std::atomic<bool>, int> pair = std::make_pair({true}, 1); //doesn't work
std::pair<std::atomic<bool>, int> pair = std::make_pair(std::atomic<bool>(true), 1); //doesn't work
std::pair<std::atomic<bool>, int> pair = std::make_pair(std::move(std::atomic<bool>(true)), 1); //doesn't work
我知道 std::atomic 是不可复制的,那么你应该如何成对创建它呢?只是不可能吗?
你可以这样做:
std::pair<std::atomic<bool>, int> p(true, 1);
这使用 true
初始化原子第一个成员,没有任何无关的副本或移动。在 C++17 中,保证复制省略还允许您编写:
auto p = std::pair<std::atomic<bool>, int>(true, 1);