我找到了cppreference
_Atomic ( type-name )
(自C11以来)
用作类型说明符;这表示一种新的原子类型_Atomic type-name
(2)(自C11起)
用作类型限定符;这指定了type-name的原子版本。在此角色中,它可以与const,volatile和restrict混合使用,但与其他限定符不同,type-name的原子版本可能具有不同的大小,对齐和对象表示。那么使用_Atomic(int)
而不是_Atomic int
保证它与int
的大小相同吗?
在_Atomic
Ex中使用限定符:
_Atomic(volatile int)
引发错误,但是像这样使用它:
_Atomic(volatile _Atomic(int)*)
才不是;这是标准行为吗?
我注意到原子函数(例如:atomic_store
,atomic_load
,atomic_compare_exchange_weak
)的工作没有传递的类型是_Atomic
类型,我仍然可以毫无问题地管理竞争条件。这是标准行为吗?是否有缺点或导致任何错误?
第一个问题:
注意原子整数类型的表示不必与其对应的常规类型具有相同的大小。它们应尽可能具有相同的大小,因为它可以减少移植现有代码所需的工作量。
第二个问题:
[约束]
3原子类型说明符中的类型名称不应引用数组类型,函数类型,原子类型或限定类型。
volatile int
是一种合格的类型。由于违反了约束部分,因此编译器需要输出诊断消息。除此之外,这种结构的行为是不确定的。
第三个问题:
5在以下概要中:
A
指的是原子类型之一。
他们期待_Atomic
类型。传入非原子变量,因此未定义行为。