可有人请澄清差的包括选项
#include <atomic>和#inlucde <cstdatomic>?
我猜是没有,因为它的行为相同?
我问这个是因为在我的debian系统中我只有原子和我的kubuntu系统我得到了cstdatomic.
Debian上的编译器:版本4.7.2(Debian 4.7.2-4)
Kubuntu上的编译器:版本4.6.3(Ubuntu/Linaro 4.6.3-1ubuntu5)
Jon*_*ely 18
现有的答案都是错误的,大多数评论都是错误的.
<cstdatomic>不是任何标准中定义的标头.
它是在旧的C++ 0x草案中定义的,但不是最终的C++ 11标准,只是<atomic>.因此它被包含在GCC 4.4的实验性C++ 0x支持中,但随后在C++ 0x草案中重命名(由N2992在2009年完成)后重命名为更高版本.
<cstdatomic>除非你坚持使用GCC 4.4并且乐于使用C++ 11原子的不完整和错误版本,否则你不应该使用它.(我不知道为什么Kubuntu的GCC 4.6包含标题,它不在上游GCC 4.6版本中,它必须是Ubuntu或Kubuntu或Linaro补丁.)
<atomic> 是任何合理符合C++ 11实现的标准C++ 11头文件.
<stdatomic.h>是C11标头,但C++ 11库基于C99库,因此不包括<stdatomic.h>也不提供<cstdatomic>与之对应的库.
<atomic> 是C++原子操作库.
<cstdatomic> 是C原子操作库的C++版本.
两者都会给你,std::atomic_char但只有C++版本std::atomic<T>.
作为一般规则,C头应该用C++使用通过移除.h延伸和预先挂起c到名称:stdatomic.h变cstdatomic.这将包括进入命名空间的C头std.
还要注意stdatomic.h(cstdatomic因此)是C11并且atomic是C++ 11,这可能解释了编译器支持的差异.