struct S
{
int x;
int y;
};
std::atomic<S> asd{{1, 2}}; // what should this be? This doesn't work
编辑:
{{1, 2}}
和({1, 2})
在g++中均有效,在clang中均不起作用。是否有解决clang的方法? 最佳答案
这是clang bug 18097。 Here's是讨论此问题的长篇文章,似乎是clang仅支持T
中atomic<T>
的标量类型。 C++ 11标准明确规定(第29.5/1节)T
可以是任何普通可复制的类型。
问题中显示的两种用法都应与此构造函数匹配
constexpr atomic(T) noexcept;
我能想到的解决此问题的唯一方法是默认构造
atomic<S>
,然后使用atomic::store
初始化对象。std::atomic<S> asd;
asd.store({1,2});
关于c++ - 原子结构的统一初始化?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24891122/