关于序列点的解释

2024-01-01

最近,我看到很多关于一些疯狂但语法上允许的代码语句的输出的问题,例如i = ++i + 1 and i=(i,i++,i)+1;。 坦率地说,现实中几乎没有人在实际编程中编写任何此类代码。坦白说,在我的专业经验中,我从未遇到过此类代码。所以我通常最终会跳过这样的问题。但最近被问到的此类问题的数量之多让我思考我是否因跳过此类问题而错过了一些重要的理论。我猜这样的问题围绕着Sequence points。坦率地说,我对序列点几乎一无所知,我只是想知道不了解它是否会在某种程度上成为一种障碍。那么有人可以解释一下理论/概念吗Sequence points,或者如果可能的话,指出解释该概念的资源。另外,是否值得投入时间来了解这个概念/理论?


我能想到的最简单的答案是:

C++ 是根据抽象机定义的。在抽象机上执行的程序的输出仅根据“副作用”执行的顺序来定义。副作用被定义为对 IO 库函数的调用,以及对标记为 volatile 的变量的更改。

C++ 编译器可以在内部做任何他们想做的事情来优化代码,但他们不能改变 volatile 变量和 io 调用的写入顺序。

序列点定义了c/c++程序的心跳——序列点之前的副作用是“完成”的,而序列点之后的副作用尚未发生。但是,副作用(或者,可以间接影响副作用的代码(within序列点可以重新排序。

这就是为什么理解它们很重要。如果没有这种理解,您对 C++ 程序是什么(以及如何通过积极的编译器对其进行优化)的基本理解就会有缺陷。

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

关于序列点的解释 的相关文章

随机推荐

  • 我们可以使用 JavaScript 来压缩 PDF 文件吗?如果是,如何进行?如果否,为什么?

    我在浏览器上实现了上传文档功能 用户可以一次上传大约 4 5 个文档 然而 当我们上传文件大小在5MB左右且网络连接较慢 在浏览器的开发工具中设置较慢的3G网络 的文档时 由于网络超时 我们无法上传所有文件 为了成功上传尺寸较大且互联网连接
  • 使用 DQN 增加 Cartpole-v0 损失

    您好 我正在尝试训练 DQN 来解决健身房的 Cartpole 问题 由于某种原因Loss https i stack imgur com uHxpR png看起来像这样 橙色线 你们能看一下我的代码并帮忙解决这个问题吗 我已经对超参数进行
  • 根据条件选择 OpenMP 编译指示

    我有一个想要优化的代码 它应该在各种线程中运行 在我的 for 循环中使用不同的调度技术运行一些测试后 我得出的结论是 最适合的方法是在只有一个线程时执行动态调度 否则进行引导 这在 openMP 中可能吗 更准确地说 我希望能够执行以下操
  • 查找项目并更改自定义对象数组中的值 - Swift

    我有这门课 class InboxInterests var title var eventID 0 var count var added 0 init title String eventID NSInteger count Strin
  • 如何强制 gmail 收件箱重新加载/刷新?

    我构建了一个使用 Gmail API 中的导入端点的应用程序Gmail Users Messages import 克隆电子邮件但允许更改主题 然后 它使用删除端点删除原始 旧消息Gmail Users Messages remove 我想
  • java字节码-小于int的类型的表示

    在我大学的一个项目中 我直接使用 Java 字节码 浏览 JVM 可用指令列表后 http en wikipedia org wiki Java bytecode instruction listings http en wikipedia
  • HTML 图像 src 区分大小写

    我的图像文件夹名称大写 但是src是小写的 所以这不是加载图像 我无法将所有图像文件夹设置为小写 因此我想更改代码以采用不区分大小写的路径 我有一个这样的链接 a href http www google com img src image
  • 构建 Android NDK 项目时出现问题

    我尝试在 Linux Ubuntu 上的 Eclipse 中构建项目 Eclipse 显示错误消息 Build of configuration Default for project FFVideo home art android nd
  • Duck 在 Typescript 中输入 Promise

    假设我有一个日志记录函数 它接受一个函数并记录名称 参数和结果 function log a f args A gt B args A gt B return function args A B console log f name con
  • 使用 jQuery 检查单选按钮后切换内容

    我该如何解决这个问题 我想切换每个单选按钮的内容 如果已选择 另外我如何设置默认选择的单选按钮 option detail hide option click function this next div slideToggle this
  • 如何增加分配给 GlassFish 的内存?

    我想增加 GlassFish 实例的内存分配 有人可以帮我吗 您的答案可以通过管理控制台或命令行 我不介意 找到您正在使用的文件domain xml 即 usr local glassfish 4 1 glassfish domains d
  • 使用枚举绑定组合框选定值

    我无法绑定组合框选定的值 public void InitializePage cbStatus DataSource Enum GetValues typeof CourseStudentStatus 在我的构造函数上 public Ed
  • 状态更改后 useEffect 挂钩未触发

    我有两个兄弟组件 它们通过反应中的上下文共享状态 组件之间共享的状态是一个数组 如果我更新arr在一个组件中声明 我希望另一个组件侦听该更新并相应地执行某些操作 当我使用useEffect在第二个组件中 我监听以下内容的变化arr状态变量
  • 未找到 ui 头文件 (ui_name.h)

    我已经创建了表单 并将其保存在项目目录中 现在我想添加一些代码 所以 我创建了头文件 ifndef SORTDIALOG H define SORTDIALOG H include
  • 我们如何在 iOS 13 的当前 iOS 应用程序中支持深色模式?

    我当前的应用程序是用 objC 和 Swift 开发的 我需要支持暗模式 谁能建议我如何在全球范围内实现这一目标 以下是添加颜色逻辑的代码 该逻辑应出现在深色模式中 if self traitCollection userInterface
  • 如何使用iText在PDF中插入图像并下载到客户端机器?

    我使用 jdbc 从数据库获取数据 然后使用 iText 创建一个可以在客户端计算机上下载的 PDF 文件 该应用程序以 html jsp 编码并在 Apache Tomcat 上运行 我用response getOutputStream立
  • WPF 中的 GridView 动态列宽

  • Pandas - 制作列 dtype 对象或因子

    在 pandas 中 如何将 DataFrame 的列转换为 dtype 对象 或者更好的是 变成一个因素 对于那些会说 R 的人 在 Python 中 我该如何as factor 另外 有什么区别pandas Factor and pan
  • Alamofire 嵌套请求

    我需要向同一个 API 发出三个不同的请求 这些调用都不依赖于其他调用 我目前的请求嵌套如下 API getPopularMovies responseObject error in if let results responseObjec
  • 关于序列点的解释

    最近 我看到很多关于一些疯狂但语法上允许的代码语句的输出的问题 例如i i 1 and i i i i 1 坦率地说 现实中几乎没有人在实际编程中编写任何此类代码 坦白说 在我的专业经验中 我从未遇到过此类代码 所以我通常最终会跳过这样的问