gpt4 book ai didi

rust - 如何正确创建堆分配的 int 并将其传递给另一个函数进行修改

转载 作者:行者123 更新时间:2023-11-29 08:13:06 26 4
gpt4 key购买 nike

我正在研究 Rust 的最基本概念,并对我之前的问题有一个后续问题:Why does the binary + operator not work with two &mut int?

我想在堆上创建一个int,我想将它传递给另一个函数进行修改。

我想到了这个:

fn increment(number: &mut Box<int>) {

**number = **number + **number;

println!("{}", number);
}

fn main() {
let mut test = box 5;
increment(&mut test);

println!("{}", test);
}

这打印

10
10

这就是我想要的。

但是,** 看起来很奇怪,我想我也可以写这样的东西:

fn increment(number: &mut int) {

*number = *number + *number;

println!("{}", number);
}

fn main() {
let mut test = box 5;
increment(&mut* test);

println!("{}", test);
}

关于我打算在堆上创建一个 int 并在另一个函数中修改它,以下哪种方法是正确的(如果有的话)?在我看来,好像在第二个示例中,变量从堆移回堆栈 before 它被传递给 increment 方法,这不是我想要的.另一方面,第一个示例的 ** 语法看起来很奇怪。 :-/

最佳答案

你就在那里。来自Rust tutorial :

In the case of owned_box, however, no explicit action is necessary. The compiler will automatically convert a box box point to a reference like &point. This is another form of borrowing; in this case, the contents of the owned box are being lent out.

所以您需要做的就是利用隐式借用:

fn increment(number: &mut int) {
*number = *number + *number;
}

fn main() {
let mut test = box 5;
increment(test);

println!("{}", test);
}

我不认为 test 的值被移回堆栈。我怀疑从 Box 到借用引用的转换不会有任何运行时开销,但我对实现的了解不够确定。

关于rust - 如何正确创建堆分配的 int 并将其传递给另一个函数进行修改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23922675/

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