考虑:
void foo() {
std::vector<std::atomic<int>> foo(10);
...
}
foo的内容现在有效吗?还是我需要显式循环并初始化它们?我检查了Godbolt,它看起来还不错,但是在这一点上,该标准似乎很混乱。
所述的std ::矢量构造器表示,它插入默认插入的实例std::atomic<int>
,这是初始化值经由放置new
。
我认为这种价值初始化的效果适用:
2)如果T是具有默认构造函数的类类型,该构造函数既不是用户提供也不是未删除的(也就是说,它可能是带有隐式定义或默认默认构造函数的类),则将该对象初始化为零,然后将其如果具有非平凡的默认构造函数,则默认初始化;
因此在我看来,原子是零初始化的。所以问题是,是否std::atomic<int>
在有效对象中对结果进行零初始化?
我猜答案是“在实践中是,但没有真正定义”?
注意:此答案同意它是零初始化的,但是并没有真正说明是否意味着该对象有效。
atomic_init
。无论如何,您已经已经必须在问题中的代码之间进行同步了