Rust 运算符

本文详细介绍了Rust编程语言中的运算符,包括一元运算符如取负、解引用和取反,二元运算符如算术、位运算和比较运算符,以及惰性布尔运算符、类型转换运算符、重载运算符和格式化字符串的方法。着重讨论了运算符的实现和用途,以及如何通过trait进行运算符重载。
摘要由CSDN通过智能技术生成

一元运算符

顾名思义,一元操作符是专门对一个 Rust 元素进行操作的运算符,主要包括以下几个:

  • - :取负,专门用于数值类型。实现了 std::ops::Neg。
  • * :解引用。实现了 std::ops::Deref 或 std::ops::DerefMut。
  • ! :取反。例如 !false 相当于 true。有意思的是,如果这个操作符对数字类型使用,会将其每一位都置反!也就是说,对一个 1u8 进行 ! 操作,将得到一个 254u8。实现了 std::ops::Not。
  • &&mut :租借,borrow。向一个 owner 租借其使用权,分别租借一个只读使用权和读写使用权。

二元运算符

算数操作符

  • + :加法。实现了 std::ops::Add。
  • -:减法。实现了 std::ops::Sub。
  • * :乘法。实现了 std::ops::Mul。
  • / :除法。实现了 std::ops::Div。
  • % :取余。实现了 std::ops::Rem。

位运算符

  • & :与操作。实现了 std::ops::BitAnd。
  • | :或操作。实现了 std::ops::BitOr。
    -^ :异或。实现了 std::ops::BitXor。
  • << :左移运算符。实现了 std::ops::Shl。
  • >> :右移运算符。实现了 std::ops::Shr。

惰性 boolean 运算符

逻辑运算符有三个,分别是 &&||!。其中前两个叫做惰性 boolean 运算符,之所以叫这个名字,是因为在 Rust 中也会出现其他类 C 语言的逻辑短路问题,所以取了这么一个名字。其作用和 C 语言里的一模一样。不过不同的是,Rust 里这个运算符只能用在 bool 类型上。

比较运算符

比较运算符实际上也是某些 trait 的语法糖,不过比较运算符所实现的 trait 只有2个:std::cmp::PartialEqstd::cmp::PartialOrd

其中,==!= 实现的是 PartialEq,<>>=<=实现的是 PartialOrd。

标准库中,std::cmp 这个 mod 下有4个 trait,而且直观来看 Ord 和 Eq 岂不是更好?但 Rust 对于这4个 trait 的处理是很明确的。因为在浮点数有一个特殊的值叫 NaN,这个值表示未定义的一个浮点数。在 Rust 中可以用0.0f32 / 0.0f32来求得其值,这个数是一个都确定的值,但它表示的是一个不确定的数,那么NaN != NaN 的结果是啥?标准库告诉我们是 true。但这么写有不符合Eq定义里的total equal(每位一样两个数就一样)的定义。因此有了 PartialEq这么一个定义,NaN 这个情况就给它特指了。

为了普适的情况,Rust 的编译器就选择了PartialOrdPartialEq来作为其默认的比较符号的trait

类型转换运算符

这个看起来并不算个运算符,因为它是个单词 as。就是类似于其他语言中的显示转换了。

fn avg(vals: &[f64]) -> f64 {
    let sum: f64 = sum(vals);
    let num: 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值