为什么标准会造成这种差异?
似乎两者都以相同的方式指定原子类型。
最佳答案
原子类型说明符:-:)
Syntax: _Atomic ( type-name );
你可以像这样声明一个原子整数:
_Atomic(int) counter;
_Atomic
关键字可以以 _Atomic(T)
的形式使用,其中 T 是类型,作为类型说明符等同于 _Atomic
T. 因此,_Atomic(T) x, y;
声明具有相同类型的 x 和 y,即使 T 是指针类型。这允许 C++0x 仅与 C++ 兼容 _Atomic(T)
宏定义为 atomic<T>
.
如果实现不支持原子类型,则不得使用原子类型说明符。 原子类型说明符中的类型名称不得引用数组类型、函数类型、原子类型或限定类型。
与原子类型关联的属性仅对左值表达式有意义。
If the _Atomic keyword is immediately followed by a left parenthesis, it is interpreted as a type specifier (with a type name), not as a type qualifier.
原子类型限定符 :-:)
_Atomic volatile int *p;
It specifies that p has the type ‘‘pointer to volatile atomic int’’, a pointer to a volatile-qualified atomic type.
引用类型为对象类型的指针类型以外的类型不得限制限定。
_Atomic
修改的类型限定符不得为数组类型或函数类型。
与限定类型关联的属性仅对左值表达式有意义。
如果同一限定符在同一说明符限定符列表中多次出现,无论是直接出现还是通过一个或多个 typedef,其行为与只出现一次相同。如果其他限定符与 _Atomic
一起出现说明符限定符列表中的限定符,结果类型是如此限定的原子类型。
关键词_Atomic
单独用作类型限定符。只要进行了适当的转换,包括通过强制转换运算符,实现就可以放宽对相应非原子类型具有相同表示和对齐方式的要求。
关于c - _Atomic 类型限定符和类型说明符之间有区别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26463074/