我正在使用
#[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
,所以我猜这只是自动取消引用(在某个地方)并且无关紧要?
为什么要额外
&
?
根据源代码:
未调整大小的类型需要额外的间接寻址,但只有最后一个字段可以调整大小。