"&"符号在IT技术中有什么作用?

4

我正在尝试理解Rust的引用。

fn main() {
    let x: i32 = 0;
    println!("{}", x+1); // this works
    println!("{}", (&x)+1); // this works
    //println!("{}", (&(&x))+1); // but this failed
}

我能提供的服务:

    1
    1
< p > & 隐藏字元 实际上是什么意思?为什么像整数一样可以添加 < code >&x,但无法添加 < code >&(&x)?< /p >
1个回答

5

&获取操作数的引用。这可以被视为查找存储值的内存地址。

您的示例有效,因为+是使用Add trait实现的,该trait有以下变体:

impl Add<i32> for i32
impl<'a> Add<i32> for &'a i32
impl<'a> Add<&'a i32> for i32
impl<'a, 'b> Add<&'a i32> for &'b i32

也就是说,您可以添加任何引用和非引用的对。但是,您第二个示例将具有两个间接级别(&&i32),并且Add特性未实现那么多级别的引用。

谢谢!为什么 Rust 实现了引用的 add trait? - siyu
@siyu 是的 - 那是我贴出的代码片段。然而,它没有为双重引用和值实现 trait,这就是你的情况。 - Shepmaster
是的。但为什么要这样做,这会让事情变得很混乱吗?(我无法一眼看出某个东西是整数还是整数的引用) - siyu
第一条评论中有错别字:doest -> does - siyu
1
在现实世界的代码中,双重间接引用实际上非常罕见。您可以使用 *x 手动取消引用。 - llogiq

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接