在我的类中,我想要一个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>
既不能复制,也不能移动。
因此,我需要以某种方式直接初始化这两个标志。
但是它的语法是什么呢?
这是一个实时代码链接:https://godbolt.org/z/fEsfaWGcn
发布于 2021-04-15 06:44:43
您可以为std::array
的初始化器列表中的每一项使用初始化器列表。下面是如何实现的:
struct Foo {
Foo()
: flags{{
{true},
{true}
}}
{ /* no op */ }
std::array<std::atomic<bool>, 2> flags;
};
虽然语法有点奇怪,但它工作得很好(在GCC,Clang,MSVC和ICC上进行了测试)。
https://stackoverflow.com/questions/67097726
复制相似问题