为什么未根据std :: atomic

时间:2018-11-17 23:17:39

标签: c++ atomic c++20

P0019r8中引用的std :: atomic_ref的实现大致将模板类型保留为成员变量(https://github.com/ORNL/cpp-proposals-pub/blob/master/P0019/atomic_ref.hpp),并使用GNU内置函数来实现原子操作。

我在这里的问题是-为什么不从reinterpret_caststd::atomic而是使用原子操作?我是否缺少便携性或细节?

2 个答案:

答案 0 :(得分:3)

将某事物重新解释为没有使用的事物,这是不确定的行为。

答案 1 :(得分:3)

我们无法保证std::atomic<T>除了T之外什么都不包含,并且其大小和对齐要求与T相同。例如,如果sizeof(T) == 3,则std::atomic<T>的实现可以将其填充到4个字节以启用内部函数。再举一个例子,如果sizeof(T)对于内在函数来说太大了,std::atomic<T>可能会存储某种同步原语来序列化操作。

因此,即使您从对象模型违规中忽略了一般的未定义行为,在通常情况下,reinterpret_caststd::atomic也不可行。