P0019r8中引用的std :: atomic_ref的实现大致将模板类型保留为成员变量(https://github.com/ORNL/cpp-proposals-pub/blob/master/P0019/atomic_ref.hpp),并使用GNU内置函数来实现原子操作。
我在这里的问题是-为什么不从reinterpret_cast
到std::atomic
而是使用原子操作?我是否缺少便携性或细节?
答案 0 :(得分:3)
将某事物重新解释为没有使用的事物,这是不确定的行为。
答案 1 :(得分:3)
我们无法保证std::atomic<T>
除了T
之外什么都不包含,并且其大小和对齐要求与T
相同。例如,如果sizeof(T) == 3
,则std::atomic<T>
的实现可以将其填充到4个字节以启用内部函数。再举一个例子,如果sizeof(T)
对于内在函数来说太大了,std::atomic<T>
可能会存储某种同步原语来序列化操作。
因此,即使您从对象模型违规中忽略了一般的未定义行为,在通常情况下,reinterpret_cast
到std::atomic
也不可行。