C++20 前后 std::atomic 的初始化

2024-01-31

考虑以下两行代码:

std::atomic_flag a { };                // Since C++20
std::atomic_flag a = ATOMIC_FLAG_INIT; // Until C++20

在C++20中,第一行初始化a到清晰的状态,但如果我在 C++17 中使用它,a将被初始化为未指定的状态。第二行在 C++20 中已弃用,但在 C++ 17 中,它初始化a到清晰状态。我怎样才能将它们都包含在代码中?我想我应该使用宏,但是那个宏到底是什么?它是否适用于所有其他的初始化std::atomic<T> types?


atomic_flag很特别。它在逻辑上等价于atomic<bool>,但是委员会吸取了关于具有不同行为的独特专业化的教训,因此他们制作了一个完全独立的类型而不是专业化atomic for bools.

All atomic<T>s 可以通过给它一个 type 的值来初始化T(这就是如何绕过 C++20 之前的值初始化废话)。atomic_flag不能被给予bool,因为它不存储bool。这就是为什么它有那么特别ATOMIC_FLAG_INIT macro.

ATOMIC_FLAG_INIT可能已被弃用,但它在 C++20 中并未消失,因此您可以自由使用它。在里面相对不太可能发生的事件 http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2020/p2139r0.html#3.24它已从 C++23 中删除,到那时您应该不再需要支持 C++17。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++20 前后 std::atomic 的初始化 的相关文章

随机推荐

  • Jquery 无法读取 Internet Explorer 上的自定义标记文本

    我想在我的 html 页面中使用自定义标签并使用 jquery 读取其中的文本 就像是
  • 合并可跨越对象时出错

    我想合并 3 个可跨越的对象 这段代码工作正常 Spannable s1 new SpannableStringBuilder bold s1 setSpan new StyleSpan android graphics Typeface
  • 扩展FutureTask,如何处理取消

    我已经延长了FutureTask from java util concurrent提供回调来跟踪提交给任务的执行情况ExecutorService public class StatusTask
  • git 仅在 Gitlab CI 上克隆 LFS 文件的 sha

    我推了 png文件 每个文件大小为 2 MB 并由git lfs 到我的 gitlab com 存储库 比如说repo a 在另一个仓库的 CI 工作中repo b where git lfs安装后 repo a 被克隆 现在我看到所有 p
  • 如何通过 pkg-config 使用 C++ Boost 库?

    我成功编译并安装了最新版本的 Boost 库到我的 Linux 机器上 现在 我希望能够使用 pkg config 来简化提供 GCC 链接参数的过程 由于我懒得手动编码自己的 pc 文件 是否有一个脚本 工具可以自动生成所需的 pc 文件
  • 有什么方法可以使用 exe 文件执行我的 Node js 和 puppeteer 程序吗?

    当我在 CMD 上使用该程序时 该程序在 puppeteer 上运行良好 尽管如此 这是一个漫长的过程 对于任何非技术人员来说也很复杂 我想制作一个 exe 文件来执行我手动执行的任务 以在 CMD 中运行此 node js 文件 正如您首
  • Azure Active Directory 注销或清除本机应用程序的令牌缓存

    我有一个 C Web API REST 服务后端 我为 CMS 网页和 Angular2 应用程序提供服务 这是相关的 Angular 应用程序需要通过后端发送用户名和密码 原始凭据 进行身份验证 后端使用这些向 Azure Active
  • 尽管时间戳是正确的,但 date() 返回错误的日期!

    我的 php 日期函数有一个奇怪的问题 code numDays 8 date strtotime 2010 11 06 for i 1 i lt numDays i thisDay date D d M Y date print this
  • Java HTML 渲染“pt”与“px”大小

    我遇到了在 JLabel 中指定 html 元素宽度的问题 我想我应该在此处的旗杆上运行它 看看是否有人有任何建议 当我使用 px 单位值指定元素的宽度时 结果大小实际上约为 133 而如果我不使用单位或使用 pt 我会得到我指定的确切大小
  • 如何在 Django 中创建对话收件箱

    我有一个Message类有fromUser toUser text and createdAt fields 我想模仿 Whatsapp 或 iMessage 或任何 SMS 收件箱 这意味着我想获取每个对话的最后一条消息 I tried
  • 查找并发、重叠、日期范围的数量

    我有一个多年来一直试图解决的难题 但它完全超出了我的能力范围 我有一个包含 3 列的电子表格 A 列是讲师 ID 号 B 列是他们的课程开始日期 C 列是他们的课程结束日期 每个讲师 ID 都有多个课程 我基本上是想回答这个问题 这位讲师在
  • 独立于平台的资源系统(如 Qt Resource 系统)

    是否有一个类似于 Qt 附带的 C 平台独立资源系统 但没有 Qt 依赖项 我想从我的 C 源代码中访问任意数据 也就是说 不仅是图标 还包括翻译或着色器等 或者某种虚拟文件系统库来访问 例如ZIP 压缩文件或类似文件也能满足我的需要 我为
  • 检查视口中的可见性(puppeteer)

    如何使用 Puppeteer 检查 HTML 元素在视口 可见区域 内是否可见 例如 如果我必须滚动才能看到一个按钮 那么它就不可见 page waitForSelector element visible true page waitFo
  • 正则表达式前瞻、后瞻和原子组

    我在我的正则表达式体内发现了这些东西 但我不知道我可以用它们做什么 有人有例子 以便我可以尝试理解它们是如何工作的吗 positive lookahead negative lookahead lt positive lookbehind
  • 使用 Python Rich 在布局内获取提示

    是否可以使用提示获取用户输入within使用 Python Rich 的布局元素 我的目标是使用 Rich 的 Layout 构建一个具有 4 个窗格的全屏窗口 顶部 3 个包含标题 成分和方法 效果很好 但我希望底部一个包含用户输入的提示
  • Xamarin.Forms 中的透明页面

    我需要能够为 Android 创建透明的 Xamarin Forms 页面 我怎样才能做到这一点真正的页面渲染器 现在它有默认的背景颜色 assembly ExportRenderer typeof MyPage typeof ClearB
  • 如何在 Web 应用程序中使用 java.util.logger?

    我正在尝试在网络应用程序中使用记录器 我添加了 FileHandler 将日志写入文件 现在 我需要在项目中的其他类 servlet 中使用相同的处理程序 以便将所有类的日志写入同一文本文件 我怎样才能实现这个目标 Initialize a
  • VBA 动态范围

    我想知道是否有人可以帮助我 我将下面的代码放在一起 在我的工作簿中创建一个新工作表并应用动态命名范围和页面格式 Sub AllDataNamedRanges Dim rLOB As Range Dim rStaffName As Range
  • keras:如何保存历史对象的训练历史属性

    在 Keras 中 我们可以返回以下输出model fit历史记录如下 history model fit X train y train batch size batch size nb epoch nb epoch validation
  • C++20 前后 std::atomic 的初始化

    考虑以下两行代码 std atomic flag a Since C 20 std atomic flag a ATOMIC FLAG INIT Until C 20 在C 20中 第一行初始化a到清晰的状态 但如果我在 C 17 中使用它