gpt4 book ai didi

swift - 为什么函数对其所有输入输出参数具有长期写入权限?

转载 作者:可可西里 更新时间:2023-11-01 01:07:34 26 4
gpt4 key购买 nike

根据Swift Programming Language Guide(for Swift 4.2)中的“Memory Safety”一章,有一句话“A function has long-term write access to all its in-out parameters”。 https://docs.swift.org/swift-book/LanguageGuide/MemorySafety.html

我创建了一个新的命令行工具项目来在 Xcode 10.1 中验证它。

var stepSize = 1

func increment(_ number: inout Int) {
print(stepSize)
}

increment(&stepSize)

我期望输出为1,但实际输出的是崩溃日志“同时访问0x100587430,但修改需要独占访问。”

我知道这是访问输入输出参数的冲突,但我不知道为什么会这样。为什么函数对其所有输入输出参数具有长期写入权限?

最佳答案

此 API 的使用者会看到 func increment(_ number: inout Int),但看不到实现。它只能假定 increment(_:) 对参数进行写入,因为原则上它可以

即使函数实现当前没有进行任何写操作,也存在这种可能性,因此编译器必须假设最坏的情况。想象一下,如果允许某些客户端代码针对此进行编译,则将其视为只读(因为当时可能是这种情况)。当有人将 number += 1 添加到函数体时,客户端代码会发生什么情况?

这类似于声明它可以throw 的函数,其实际实现不会throw。编译器仍然将其视为抛出,并且需要使用 try 的某些变体来处理错误。

关于swift - 为什么函数对其所有输入输出参数具有长期写入权限?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54394980/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com