从C++转Swift:如何直接将字面量传入inout参数函数?
Swift中类似C++右值引用传参的实现方法
Swift并没有C++中string&&这种右值引用的语法,但可以通过以下几种简便方式实现你想要的效果:
方法1:函数内部创建可变副本(推荐,无需inout)
如果你的需求只是在函数内部修改传入的字符串(不需要将修改结果传回外部),可以直接让函数接收不可变的String参数,在函数内部创建可变副本进行修改,这样就能直接传入字面量:
func f(_ s: String) { var mutableS = s mutableS[0] = "a" // 在这里使用修改后的mutableS即可 } f("foo")
这种方式和你C++代码的实际效果一致——都是修改临时生成的字符串实例,因为Swift的String是值类型,传入的字面量会被复制到函数参数中,内部的可变副本是独立的,修改不会影响外部。
方法2:临时可变绑定传入inout参数(Swift 5.7+)
如果必须保留inout参数(比如需要将修改后的结果传出到外部),Swift 5.7及以上版本支持直接创建临时可变绑定作为inout参数传入,无需单独声明变量:
func f(_ s: inout String) { s[0] = "a" } // 直接在调用时创建临时可变绑定并传入 f(&var "foo")
如果你需要使用修改后的结果,可以把临时变量的声明和调用合并成一行:
var result = "foo" f(&result) // 或者更紧凑的写法 f(&var result = "foo")
内容的提问来源于stack exchange,提问作者WaddleDee72
相关产品推荐
相关产品推荐

