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 18097Here's是讨论此问题的长篇文章,似乎是clang仅支持Tatomic<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/

10-11 22:53