使用逗号运算符是个好习惯吗?

2024-02-29

我最近(实际上仅在 SO 上)遇到了 C/C++ 逗号运算符的使用。据我所知,它在左侧和右侧运算符之间的线上创建了一个序列点,以便您拥有可预测的(定义的)评估顺序。

我对为什么要在语言中提供这一点感到有点困惑,因为它似乎是一个可以应用于本来不应该工作的代码的补丁。我发现很难想象一个不太复杂(并且需要重构)的地方可以使用它。

有人可以解释这种语言功能的目的以及它可以在实际代码中使用的地方(在合理范围内)(如果有的话)吗?


它可以在以下情况下有用:while() loops:

while (update_thing(&foo), foo != 0) {
    /* ... */
}

这避免了必须重复update_thing()线,同时仍保持退出条件while()控制表达,在您期望找到它的地方。它也能很好地配合continue;.

它对于编写计算结果的复杂宏也很有用。

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

使用逗号运算符是个好习惯吗? 的相关文章

随机推荐

  • 如何防止和/或处理 StackOverflowException?

    我想预防或处理StackOverflowException我从一个电话中得到的XslCompiledTransform Transform内的方法Xsl Editor我在写信 问题似乎是用户可以写一个Xsl script这是无限递归的 它只
  • 如何强制原则从数据库重新加载数据?

    我在 symfony2 1 安装中使用doctrine mongodb 1 0 0 BETA1 因此 我试图强制我的存储库从数据库调用数据 而不是使用它已缓存的对象 audit dm gt getRepository WGenSimscho
  • Javascript DOM:设置自定义 DOM 元素属性

    可以在 DOM 元素上设置自定义属性并依赖它们持续存在吗 例如 给定 div div 这样做公平吗document getElementById foo bar baz 并期望document getElementsByTagName di
  • 设置语言不起作用 select2

  • C++ 模板名称漂亮打印

    我需要打印缩进的模板名称以进行调试 例如 我想像这样缩进名称 而不是单行 boost phoenix actor lt boost phoenix composite lt boost phoenix less eval boost fus
  • opengl 中的顶点缓冲区

    我正在制作一个小型 3D 图形游戏 演示以供个人学习 我了解 d3d9 和很多关于 d3d11 的知识 但目前对 opengl 知之甚少 所以我打算抽象出图形的实际渲染 以便我的场景图和 上面 的所有内容都不需要了解如何实际绘制图形 我打算
  • 如何在 SwiftUI 中初始化 View Again?

    我在我的项目中使用 SwfitUI 并且有一个 NavigationView 和 List 我在打开详细视图后单击单元格 然后单击导航后退按钮 我想在单击导航后退按钮后删除视图 它是 SwiftUI 中的结构 因为如果我再次单击相同的单元格
  • 如何初始化共享 javascript 模块默认导出

    我想在多个模块之间共享一个 api 实例 并能够使用外部配置对其进行初始化 我的代码使用 Webpack 和 Babel 将这些漂亮的 ES6 模块转换为浏览器可用的东西 我正在努力实现这一目标 api js let api null ex
  • 解码熊猫字符

    下面是我的 DF 示例 ROLE NAME GESELLSCHAFTER DUPONT DUPONT GESCH FTSF HRER DUPONT DUPONT KOMPLEMENT R DUPONT DUPONT GESELLSCHAFT
  • 无法分配对象,因为其复制赋值运算符被隐式删除错误

    在我的小型打砖块克隆游戏中 我试图从向量中删除一些值 该向量包含 Brick 类 它们以网格状模式在屏幕上实例化 当球和砖块发生碰撞时 砖块需要消失 我正在尝试用一小段代码来完成此任务 for int i 0 i lt bricks siz
  • CAReplicatorLayer 背后的魔力是什么?

    我觉得 CAReplicatorLayer 有趣的地方是 它能够非常有效地使用不同的变换多次显示 CALayer 如何 看起来它以某种方式重用了复制层的 后备存储 甚至对其应用了一些色调 如何 我想获得源代码或了解 CAReplicator
  • CMD:将 ECHO 管道传输到 SET/在变量中扩展变量

    x 12 3 返回从 x 变量中第 12 个字符开始的 3 个字符 我一直试图完成的是使用变量而不是12 and 3 比方说y 12 and z 3 那么 你就不能使用 x y z 因为 CMD 会认为 x 是一个变量 你能做的是set v
  • IE8 中 IIS7.5 中的 ASP.NET MVC2 的会话不粘连

    我们有一个 ASP NET MVC2 Web 应用程序 由于超出本问题范围的原因 我们决定在应用程序中使用经典会话状态 其中实现了与会话相关的以下功能 global asax 中的 Session Start 事件处理程序在会话中存储变量
  • Python 获取当前 URL

    我如何使用Python获取当前URL 我需要获取当前的 URL 以便我可以检查它的查询字符串 例如 requested url URL HERE url urlparse requested url if url 4 params dict
  • 项目导入需要 Sbt 0.12.4+

    我目前正在阅读Play for Scala Covers Play 2Peter Hilton 的书 出版商 Manning 并尝试坚持他们在书中概述的版本 播放版本 2 1 1 我下载了新的 IntelliJ IDEA 14 CE 应用程
  • Facebook Android SDK 的密钥哈希无效

    我正在尝试使用 Facebook Android SDK 开发一个带有 Facebook 登录按钮的简单应用程序 但我在密钥哈希方面遇到了麻烦 我创建了调试密钥和发布密钥 调试键 keytool exportcert alias andro
  • 如何在 Firefox 中调试 Service Worker?

    在 FF 中调试 Service Worker 似乎非常痛苦 我知道从主页我可以 进入应用程序面板 点击 关于调试 在新页面中搜索我的员工以及其他 200 名员工 单击开始 然后单击检查 我必须寻找两个控制台而不是一个并通过 两者之间的消息
  • git rebase -i HEAD~7 -- 在编辑器中仅显示“noop”

    我正在尝试将位于 HEAD 的提交压缩为后面的提交 当我跑步时git rebase i HEAD 7 但是 我只看到一个noop在编辑器中 我完全不知道这是如何运作的 我在分行工作 cleanup 我创建的 使用checkout b cle
  • 如何检查 VBScript 的默认主机是 WScript 还是 CScript?

    我想知道特定机器上 VBScript 的默认主机是什么 是否设置为 WScript 还是 CScript 例如 如果我使用cscript h cscript s那么有什么方法可以检查主机 VBScript 是否设置为 cscript 我找到
  • 使用逗号运算符是个好习惯吗?

    我最近 实际上仅在 SO 上 遇到了 C C 逗号运算符的使用 据我所知 它在左侧和右侧运算符之间的线上创建了一个序列点 以便您拥有可预测的 定义的 评估顺序 我对为什么要在语言中提供这一点感到有点困惑 因为它似乎是一个可以应用于本来不应该