4.2 运算符
02-运算符 — Comprehensive Rust
1分钟内可阅读完
译文 · 基于 Comprehensive Rust
原文链接: https://google.github.io/comprehensive-rust/std-traits/operators.html
4.2 运算符
运算符重载通过 std::ops 中的 trait 实现:
| |
讨论点:
- 你可以为
&Point实现Add。什么情况下有用?
- 答:
Add::add会消费self。若你为之重载运算符的类型T不是Copy,也应考虑为&T重载运算符。这样可避免调用点不必要的克隆。- 为什么
Output是关联类型?能否做成方法的类型参数?
- 简答:函数类型参数由调用方控制,但关联类型(如
Output)由 trait 的实现方控制。- 可以为两个不同类型实现
Add,例如impl Add<(i32, i32)> for Point会把元组加到Point上。
Nottrait(!运算符)值得注意:它不会像 C 系语言的同名运算符那样把参数转成bool;对整数类型,它会翻转数字的每一位,在算术上等价于用-1减去参数:!5 == -6。