首页 > 解决方案 > 为什么不能重载引用运算符 (&)?

问题描述

为什么可以使用特征和重载取消引用运算符*(和隐式) ,但不能重载?.DerefDerefMut&

我是出于好奇而问的。我没有具体的用例。我想了解 和 之间的不对称&*。它们是如此密切相关,几乎是互逆的,但只有一个可以重载。

这是一个用例,适合那些想要的人。这很做作,而且很模糊。如果*访问智能指针的值,则&可以创建一个智能指针,以便特定类型默认为智能指针而不是引用。

标签: rustreferenceoperator-overloading

解决方案


这是一个猜测...

对于任何类型T,都有许多指针类型:引用(共享和独占),以及各种智能指针(BoxCellRc)。这些都可以取消引用。也就是说,解引用是多对一的,可以完全由单个 operator 定义*。同时,创建指针类型是一对多的,不能由单个操作符定义&


推荐阅读