Rust 为什么不能重载引用运算符(&;)?

Rust 为什么不能重载引用运算符(&;)?,rust,reference,operator-overloading,Rust,Reference,Operator Overloading,为什么可以使用traitsDeref和DerefMut重载解引用操作符*(并隐式地),但不能重载& 我问是出于好奇。我没有具体的用例。我想了解&和*之间的不对称性。它们是如此紧密地联系在一起,几乎彼此相反,但只有一个可以超载 这里有一个用例,供那些想要的人使用。这是相当做作的,而且含糊不清。如果*访问智能指针的值,&可以创建一个智能指针,使特定类型默认为智能指针而不是引用。这里有一个猜测 对于任何类型的T,都有许多指针类型:引用(共享和独占),以及各种智能指针(Box、单元格、Rc等)。这些都可

为什么可以使用traits
Deref
DerefMut
重载解引用操作符
*
(并隐式地
),但不能重载
&

我问是出于好奇。我没有具体的用例。我想了解
&
*
之间的不对称性。它们是如此紧密地联系在一起,几乎彼此相反,但只有一个可以超载

这里有一个用例,供那些想要的人使用。这是相当做作的,而且含糊不清。如果
*
访问智能指针的值,
&
可以创建一个智能指针,使特定类型默认为智能指针而不是引用。

这里有一个猜测


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

,您可以提供一个示例,说明您可能希望如何使用它吗?如果这个问题不是必须的,那只是出于好奇。重载
*
对于创建透明的智能指针很有用。然而,重载
&
更值得怀疑。用例是什么?C++允许这样做,但它被认为是不好的练习。我投票赞成“基于意见”,因为唯一能给出的答案是“因为语言不允许”。谈到为什么语言不允许它在没有征求意见的情况下是不可能被回答的,比如“它不会有用”或“它会让人困惑”。如果你有一些想法,认为重载
&
是可取的,我鼓励你问一下这个问题;很可能你正在做一些非常奇怪的事情,由此得出的答案可能对我们不止一个人有启发。@trentcl我知道你来自哪里,但我认为这只是基于观点,因为任何语言设计的选择都取决于设计师的意见。如果有人知道实际的思考过程是什么,他会想回答,太好了。如果没有,那没关系,我就是得不到答案