Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
struct S { int x; int y; }; std::atomic<S> asd{{1, 2}}; // what should this be? This doesn't work
编辑:两者都在 g++ 中工作,在铿锵声中都不工作{{1, 2}}。({1, 2})铿锵有没有解决方法?
{{1, 2}}
({1, 2})
这是铛错误 18097。这是一个讨论这个问题的长线程,这似乎是 clang 只支持Tin 的标量类型atomic<T>。C++11 标准明确规定(第 29.5/1 节)T可以是任何可简单复制的类型。
T
atomic<T>
问题中显示的两种用法都应与此构造函数匹配
constexpr atomic(T) noexcept;
我能想到解决这个问题的唯一方法是默认构造atomic<S>,然后用于atomic::store初始化对象。
atomic<S>
atomic::store
std::atomic<S> asd; asd.store({1,2});
std::atomic<S> asd({1, 2});
std::atomic<S>有一个采用 S 类型值的构造函数。初始化列表 {1, 2} 由于这个构造函数而被隐式转换为临时 S。
std::atomic<S>