有人可以澄清一下包含选项之间的区别吗#include <atomic>
and #inlucde <cstdatomic>
?
我猜没有,因为它的行为相同?
我问这个问题是因为在我的 debian 系统上我只有atomic,而在我的 kubuntu 系统上我有 cstdatomic。
现有的两个答案都是错误的,大多数评论也是错误的。
<cstdatomic>
不是定义在中的标头any标准。
它是在旧的 C++0x 草案中定义的,但不在最终的 C++11 标准中,仅<atomic>
是。因此它被作为 GCC 4.4 实验性 C++0x 支持的一部分包含在内,但随后在 C++0x 草案中重命名(由 2009 年完成)后,为以后的版本重命名。N2992).
你不应该使用<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>
与之相对应。
编辑:从 C++23 开始,有一个<stdatomic.h>
C++ 库中的头文件,但仍然没有<cstdatomic>
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)