如何初始化 std::array<std::atomic<bool>> — 没有复制或移动 ctors
How to initialize std::array<std::atomic<bool>> — no copy or move ctors
在我的 class 中,我想要一个 std::array<std::atomic<bool>>
,我想在构造函数中通过成员初始化来初始化它。
例如:
struct Foo {
Foo()
: flags{{
true,
true
}}
{ /* no op */ }
std::array<std::atomic<bool>, 2> flags;
};
遗憾的是,这不起作用,给出:error: use of deleted function 'std::atomic<bool>::atomic(const std::atomic<bool>&)'
这是有道理的,因为std::atomic<bool>
既不可复制也不可移动。
所以,不知何故,我需要直接初始化这两个标志。
但是它的语法是什么?
这是一个实时代码link:https://godbolt.org/z/fEsfaWGcn
您可以为 std::array
的初始化列表中的每一项使用一个初始化列表。方法如下:
struct Foo {
Foo()
: flags{{
{true},
{true}
}}
{ /* no op */ }
std::array<std::atomic<bool>, 2> flags;
};
虽然语法有点奇怪,但效果很好(在 GCC、Clang、MSVC 和 ICC 上测试过)。
在我的 class 中,我想要一个 std::array<std::atomic<bool>>
,我想在构造函数中通过成员初始化来初始化它。
例如:
struct Foo {
Foo()
: flags{{
true,
true
}}
{ /* no op */ }
std::array<std::atomic<bool>, 2> flags;
};
遗憾的是,这不起作用,给出:error: use of deleted function 'std::atomic<bool>::atomic(const std::atomic<bool>&)'
这是有道理的,因为std::atomic<bool>
既不可复制也不可移动。
所以,不知何故,我需要直接初始化这两个标志。
但是它的语法是什么?
这是一个实时代码link:https://godbolt.org/z/fEsfaWGcn
您可以为 std::array
的初始化列表中的每一项使用一个初始化列表。方法如下:
struct Foo {
Foo()
: flags{{
{true},
{true}
}}
{ /* no op */ }
std::array<std::atomic<bool>, 2> flags;
};
虽然语法有点奇怪,但效果很好(在 GCC、Clang、MSVC 和 ICC 上测试过)。