调试派生宏在最后一个字段添加额外的“&”

问题描述 投票:0回答:1

我正在使用

#[derive(Debug)]
查看
cargo expand
的输出,这是一个简单的案例,其中:

#[derive(Debug)]
struct Point {
    x: i32,
    y: i32,
}

已发出(添加的评论是我的):

#[automatically_derived]
impl ::core::fmt::Debug for Point {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field2_finish(
            f,
            "Point",
            "x",
            &self.x,   // <== &
            "y",
            &&self.y,  // <== &&
        )
    }
}

注意它是

&self.x
但是
&&self.y
。尝试了其他几种情况,最后一个字段似乎总是获得额外的
&
。该值看起来需要一个
&dyn Debug
,所以我猜这只是自动取消引用(在某个地方)并且无关紧要?

为什么要额外

&

rust
1个回答
1
投票

根据源代码

未调整大小的类型需要额外的间接寻址,但只有最后一个字段可以调整大小。

© www.soinside.com 2019 - 2024. All rights reserved.