关于序列点的解释

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(使用前将#替换为@)

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

  • Windows 上使用 g++ 的 Makefile,链接库

    我已经厌倦了 MSVC 6 以及每个人总是告诉我它是一个蹩脚的编译器等等 所以现在我决定尝试使用 vim 加 g 和 makefile 这是我的问题 我有以下 makefile This is supposed to be a commen
  • DispatcherTimer 未按时执行

    我正在使用 c 中的 DispatchTimer 编写一个时钟应用程序 但由于某些原因 我的时钟似乎时不时地跳过 1 秒 例如 52 秒 gt 54 秒 跳过 53 秒 在我看来 计时器并不是每秒都执行一次 DispatcherTimer
  • 扫描文本文件时如何跳过行?

    我想扫描一个文件并在阅读之前跳过一行文本 我试过 fscanf pointer n struct test i j 但这个语法只是从第一行开始 我可以使用 scanf 使用以下指令跳过行 fscanf config file n n 格式字
  • 为什么opencv videowriter这么慢?

    你好 stackoverflow 社区 我有一个棘手的问题 我需要你的帮助来了解这里发生了什么 我的程序从视频采集卡 Blackmagic 捕获帧 到目前为止 它工作得很好 同时我用 opencv cv imshow 显示捕获的图像 它也工
  • WebClient读取错误页面的内容

    我有一个加载页面内容的应用程序 我使用 WebClient 类 即使服务器返回 404 500 等错误 我也需要检索内容 我需要这样的东西 WebClient wc new WebClient string pageContent try
  • rand() 播种与 time() 问题

    我很难弄清楚如何使用 rand 并使用 Xcode 用 time 为其播种 我想生成 0 到 1 之间的随机十进制数 该代码为我提供了元素 1 和 2 看似随机的数字 但元素 0 始终在 0 077 左右 有什么想法吗 我的代码是 incl
  • C 中的模仿函数重写

    具体来说 函数重写能够调用基本重写方法 这有两部分 一个是预编译的库代码 1 另一个是库的用户代码 2 我在这里实现了一个尽可能最小的经典 Person 和 Employee 示例 非常感谢了解 OOP 概念的铁杆 C 开发人员的回应 我正
  • 用 C# 制作 Vista 风格的应用程序

    我正在运行 Windows Vista 并且希望外观看起来像常规 Vista 程序 有没有关于如何构建 Vista 风格应用程序的真正好的教程 文章 我还想学习如何使用本机代码并将其转换为 C 如this http bartdesmet n
  • 如何使用泛型类型的 DataContractSerializer 编写自定义序列化器?

    我想编写一个自定义序列化器 用于将会话状态存储到Azure 缓存 预览版 这意味着这个自定义序列化器必须实现IDataCacheObjectSerializer 如果我错了 请告诉我 我需要编写这个自定义序列化程序的原因是我需要序列化一些包
  • 不要声明只读可变引用类型 - 为什么不呢?

    我一直在阅读这个问题 https stackoverflow com questions 2274412 immutable readonly reference types fxcop violation do not declare r
  • 更改其他页面的主窗口内容

    在 WPF 应用程序的主窗口中 我有一个 Badged 元素 来自材料设计 这是我的代码
  • 为什么WCF中不允许方法重载?

    假设这是一个ServiceContract ServiceContract public interface MyService OperationContract int Sum int x int y OperationContract
  • `cosf`、`sinf` 等不在 `std` 中 [重复]

    这个问题在这里已经有答案了 根据这里的讨论 我有报告了一个错误 https bugs launchpad net ubuntu source gcc 8 bug 1831385给 Ubuntu 开发者 编译以下示例 C 程序时 includ
  • 无法通过 LINQ to Entities 使用某些功能?

    我正在尝试使用 LINQ 查询在项目上实现搜索功能 由于数据有时包含带有重音符号和其他符号的字符 因此我创建了一种方法来删除这些字符以进行搜索 这是我的代码 var addresses from a in db Addresses join
  • 在 .NET 中记录 StackOverflowException

    最近 我的 NET 应用程序 asp net 网站 中出现了堆栈溢出异常 我之所以知道该异常是因为它出现在我的 EventLog 中 我知道 StackOverflow 异常无法被捕获或处理 但是有没有办法在它杀死您的应用程序之前记录它 我
  • 有没有更好的方法来获取每个项目与谓词匹配的子序列?

    假设我有一个 IEnumerable 例如 2 1 42 0 9 6 5 3 8 我需要获得与谓词匹配的项目的 运行 例如 如果我的谓词是 bool isSmallerThanSix int number 我想得到以下输出 2 1 0 5
  • C++ 标准中短语“构造函数没有名称”的含义

    在尝试理解 C 标准中的 构造函数没有名称 这句话时 我似乎在 clang 中发现了一个错误 有人可以证实这一点吗 VS2015 and gcc rejects this code and I think they it are is co
  • 将 bignum 类型结构转换为人类可读字符串的有效方法是什么?

    我有一点问题 为了增长我的 C 知识 我决定尝试实现一个基本的 bigint 库 bigint 结构的核心将是一个 32 位整数数组 选择它们是因为它们适合寄存器 这将允许我在数字之间进行操作 这些操作将在 64 位整数中溢出 这也将适合寄
  • 将文本从文本文件添加到 PDF 文件[重复]

    这个问题在这里已经有答案了 这是我的代码 using FileStream msReport new FileStream pdfPath FileMode Create step 1 using Document pdfDoc new D
  • 如何从函数返回矩阵(二维数组)? (C)

    我创建了一个生成宾果板的函数 我想返回宾果板 正如我没想到的那样 它不起作用 这是函数 int generateBoard int board N M i j fillNum Boolean exists True initilize se

随机推荐

  • 我们可以使用 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 坦率地说 现实中几乎没有人在实际编程中编写任何此类代码 坦白说 在我的专业经验中 我从未遇到过此类代码 所以我通常最终会跳过这样的问