我正在努力理解Rust的所有权和借款模式,并对以下内容感到困惑:
let mut x: i32 = 1;
let ref_x = &mut x;
let refref_x = &mut *ref_x;
*refref_x = 2;
*ref_x = 3;
据我所知,我有效地创建了对x
的两个独立的可变引用。为什么在避免通过指针进行间接寻址并将第3行更改为
let refref_x = &mut x;
显然不是吗?我是误解了中心概念还是编译器在后台添加了一些魔力?
据我所知,我正在有效地创建两个单独的 x 可变引用。
不,第二个引用借用(因此锁定)第一个引用,因为如果您尝试在第二个引用仍然有效时使用第一个引用,您可以看到:
let mut x: i32 = 1;
let ref1 = &mut x;
let ref2 = &mut *ref1;
*ref1 = 3; // <- can not assign because ref1 is borrowed (by the previous line)
*ref2 = 2;
< code>ref2是< code>ref1的重新箭头。这并不奇怪你会感到困惑,因为这是一个没有被很好地记录的特性,尽管是一个非常重要的特性。
是我误解了中心概念,还是编译器在后台添加了一些魔力?
两者兼而有之,基本上
顺便说一句,这可能会在你第一次遇到强制移动时导致更多的混乱。
我在Rust中尝试函数指针魔术,最后得到了一个代码片段,我完全无法解释它为什么要编译,甚至无法解释它为什么要运行。 我无法解释为什么调用的方法是在
本文向大家介绍为什么我们在C ++中通过引用传递指针?,包括了为什么我们在C ++中通过引用传递指针?的使用技巧和注意事项,需要的朋友参考一下 如果需要修改指针而不是指针指向的对象,则可以按引用传递指针。 这是如何通过引用传递指针的示例- 示例 输出结果
结果是地址而不是数组。怎么解释?
本文向大家介绍一个指针可以是volatile 吗?解释为什么。 相关面试题,主要包含被问及一个指针可以是volatile 吗?解释为什么。 时的应答技巧和注意事项,需要的朋友参考一下 • 是的。尽管这并不很常见。一个例子是当一个中服务子程序修该一个指向一个buffer的指针时。
我有一个值,我想以我自己的类型存储该值和对该值中某些内容的引用: 有时,我有一个值,我想将该值和对该值的引用存储在同一个结构中: 有时,我甚至没有引用该值,我得到了相同的错误: 在每种情况下,我都会得到一个错误,即其中一个值“活得不够长”。这个错误是什么意思?
我有以下C/C代码(编译器浏览器链接): 在clang和gcc编译为C或至少启用了的情况下,上述代码转换为此程序集: 对于add,它似乎在做一些类似于: 但是对于乘法,它正在做: 为什么乘法在加法上需要额外的指令,或者它不是必需的,只是更快?