未定义的行为,或者:Swift 有序列点吗?

2023-11-24

在 C/C++ 中,第二条语句

int i = 0;
int j = i++ + i++ + ++i;

调用两者

  • 未指定的行为,因为操作数的求值顺序 未指定,并且
  • 未定义的行为,因为对同一个对象的副作用i彼此之间是无序的。

参见示例

  • 为什么这些构造(使用 ++)是未定义的行为?
  • 未定义的行为和序列点

现在,鉴于 Swift 被设计为safe语言,是什么 这里对应的情况是?的结果是

var i = 0
let j = i++ + i++ + ++i

定义明确?可以从语言参考中得出结论吗? 迅速预订j == 4?


Apple 开发者兼 Swift 设计师 Chris 回答了这个问题 拉特纳在苹果开发者论坛上的发言https://forums.developer.apple.com/thread/20001#63783:

是的,该表达式的结果将始终为 4。Swift 计算 表达式从左到右,它不是未定义或实现 定义的行为如 C.

克里斯还补充道:

也就是说,如果你编写这样的代码,就会有人试图维护它 可能对你不太满意

同意!这是为了证明这个问题的一个极端例子。

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

未定义的行为,或者:Swift 有序列点吗? 的相关文章

随机推荐

  • 配置 Tomcat 以使用 Windows 证书存储进行 SSL

    我已经部署了许多 SSL 配置 包括 Tomcat cacerts keytool 和 IIS Windows 证书存储 netsh http sslcert 因此我熟悉这些过程 有没有人想出一种方法将 Tomcat 的 SSL 连接器指向
  • 可以允许来自 HTTPS 网站的 HTTP 请求吗?

    我已经安装了 非通配符 SSL 证书 以便我的网站可以使用 HTTPS 当我尝试从 HTTP url 请求资源时 我收到如下错误消息 混合内容 页面位于 https example com 已加载完毕 HTTPS 但请求不安全的样式表 ht
  • JsonSchema:根据另一个属性的值验证类型

    我正在使用以下架构来验证我的 json schema http json schema org schema title Rules description Describes a set of rules type object prop
  • 无法从 Microsoft Graph Explorer 更新 Sharepoint 托管元数据字段

    我正在尝试通过 Graph Explorer 更新与列表项关联的字段 https developer microsoft com en us graph graph explorer 或 REST API 调用 对于其中一个字段 其值可以是
  • Apache Camel Http 和 SSL

    我一直在尝试获得与 Camel 一起使用的 2 路 ssl https 代理 我已经能够使用 2 路 ssl 设置 Jetty 组件 现在尝试让它与 Http4 组件一起工作以完成代理的客户端 当我将码头流量路由到日志组件时 一切都很好 并
  • Weka GUI - 内存不足,无法加载?

    我过去也曾加载过同样的 Weka 安装 我只是尝试加载 Weka GUI 双击图标 但出现以下错误 我该如何修复它 OutOfMemory Not enough memory Please load a smaller dataset or
  • 无法在当前目录中获取脚本源

    显然 我不能source脚本 如果该脚本位于当前目录中 例如 source some dir script sh Ok 工作正常 但如果我与脚本位于同一目录中 则会出错 cd some dir source script sh sh sou
  • Java显示当前时间

    我有一个代码 可以显示运行应用程序时的当前日期和时间 DateFormat dateFormat new SimpleDateFormat yyyy MM dd HH mm ss Calendar cal Calendar getInsta
  • VIM:按函数名称排序

    我的 menu vim 文件中有很多函数 是否可以 由我 选择它们并按函数名称对它们进行排序 p e 从乐趣中找到台词 或函数 到线endfun 查找函数名称并根据函数名称对整个块进行排序 从 a z 有时我会在函数名称上方添加一行注释 可
  • CloudKit 通知

    我可能在这里遗漏了一些明显的东西 如何创建一个 CloudKit 通知 其中包含有关您收到通知的 CKRecord 的详细信息 即不仅仅是通用的 已创建新项目 而是带有记录标题的通知 例如 吉尔和杰西卡的生日派对 为每个新记录更改创建一个带
  • 如何配置 BIRT 报告引擎直接从类路径加载字体?

    我正在编写一个使用 BIRT 生成报告的 Java 应用程序 我想将自定义字体打包在 jar 文件中 并能够将它们嵌入到 PDF 报告中 我可以先将字体提取到文件系统 然后将 BIRT 指向文件系统位置 但我想知道是否可以将 BIRT 配置
  • 树枝模板内的变量 jquery

    我正在尝试使用 twig 模板内的 jquery 变量通过 ajax 发送 但我无法访问 twig 内的 jquery 变量 我的代码是
  • JPA 实体 - 指定持久性单元?

    我有一个使用多个持久性单元的 JavaEE 项目 有没有办法指定特定 JPA 实体属于哪个持久单元 一些实体位于一个数据源中 而其他实体位于我的第二个数据源中 有没有办法使用注释来区分两者 指定哪个持久单元Entity属于 使用persis
  • 为商店构建通用应用程序时出错:“清单引用文件‘MyAppName.dll’,该文件不是有效负载的一部分。”

    当尝试为 Windows 通用应用程序的商店创建应用程序包时 我在 Visual Studio 2015 中遇到此错误 清单引用文件 MyAppName dll 该文件不是有效负载的一部分 错误是在 MyAppSourcePath Pack
  • 使用 .NET(控制台应用程序)发布多个文件和表单值

    我想将多个文件和表单变量发布到 CGI 脚本 全部在oneHTTP 请求 我相信这需要一个 HTTP postmultipart form data编码 以下是发送所需信息的 HTML 表单示例 我需要通过应用程序发送相同的信息
  • ASP.NET 捆绑/缩小:包括动态生成的 Javascript

    我有一个动态生成 Javascript 的网站 生成的代码描述了类型元数据和一些服务器端常量 以便客户端可以轻松使用服务器的服务 因此它非常可缓存 生成的 Javascript 由 ASP NET MVC 控制器提供服务 所以它有一个 Ur
  • 理解 NumPy 的 einsum

    如何np einsum work 给定数组A and B 它们的矩阵乘法和转置计算使用 A B T 或等效地 使用 np einsum ij jk gt ki A B 注 这个答案是基于一个简短的博客文章 about einsum我不久前写
  • 在 Django 中过滤窗口函数

    我有以下模型 class Foobar models Model foo models IntegerField 我想出了如何计算连续的增量foo使用窗口函数的字段 qs Foobar objects annotate delta F fo
  • Node.js HTTP 响应正文的 unicode 问题

    使用本机 http 模块的 HTTP 请求的响应正文显示 unicode 字符的问号字符 而不是其实际值 这是我正在运行的基本代码片段 var http require http var google http createClient 8
  • 未定义的行为,或者:Swift 有序列点吗?

    在 C C 中 第二条语句 int i 0 int j i i i 调用两者 未指定的行为 因为操作数的求值顺序 未指定 并且 未定义的行为 因为对同一个对象的副作用i彼此之间是无序的 参见示例 为什么这些构造 使用 是未定义的行为 未定义