rust自动解引用与强制解引用

Rust 有一个叫 自动引用和解引用(automatic referencing and dereferencing)的功能。方法调用是 Rust 中少数几个拥有这种行为的地方。

他是这样工作的:当使用 object.something() 调用方法时,Rust 会自动为 object 添加 &、&mut 或 * 以便使 object 与方法签名匹配。也就是说,这些代码是等价的:

p1.distance(&p2);
(&p1).distance(&p2);

第一行看起来简洁的多。这种自动引用的行为之所以有效,是因为方法有一个明确的接收者———— self 的类型。在给出接收者和方法名的前提下,Rust 可以明确地计算出方法是仅仅读取(&self),做出修改(&mut self)或者是获取所有权(self)。


println! 宏也可以自动解引用


强制解引用(Deref coercion) 是一种执行在函数和方法的参数上的便利。它只能用于那些实现了Deref trait的类型。
强制解引用,将一种类型的引用转换成另一种类型的引用。比如它可将 &String 转换成 &str
因为 String实现了 Deref trait, 返回一个 &str

当我们传递一个特定类型的的值的引用给一个函数/方法时,如果同函数/方法中定义的参数类型不匹配时,会自动进行解引用。一系列 deref 方法会被调用,用来在我们提供的类型,和参数所需要的类型之间 实施转换。

程序员在写函数/方法时, 不必要添加 许多 明示的 引用 (&)或者解引用(*)
强制解引用也让我们写的代码更好地同时工作在 引用/智能指针上。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注