Rust是一种系统编程语言,它的语法丰富而严谨,包括了一系列的操作符和符号。这些操作符和符号是构建Rust程序的基本元素,它们用于执行各种操作,如算术运算、逻辑比较、类型约束等。本文将详细介绍Rust中的操作符和符号,以及它们在代码中的使用方式。
Rust操作符
Rust中的操作符可以分为以下几类:
算术操作符
+:加法,例如expr + expr。-:减法,例如expr - expr。*:乘法,例如expr * expr。/:除法,例如expr / expr。%:取余,例如expr % expr。
这些操作符都支持重载,对应的特质(trait)分别是Add、Sub、Mul、Div和Rem。
赋值操作符
=:赋值,例如var = expr。+=:加法赋值,例如var += expr。-=:减法赋值,例如var -= expr。*=:乘法赋值,例如var *= expr。/=:除法赋值,例如var /= expr。%=:取余赋值,例如var %= expr。
比较操作符
==:相等比较,例如expr == expr。!=:不等比较,例如expr != expr。<:小于比较,例如expr < expr。<=:小于等于比较,例如expr <= expr。>:大于比较,例如expr > expr。>=:大于等于比较,例如expr >= expr。
这些操作符都支持重载,对应的特质是PartialEq和PartialOrd。
逻辑操作符
&&:逻辑与,例如expr && expr。||:逻辑或,例如expr || expr。!:逻辑非,例如!expr。
位操作符
&:位与,例如expr & expr。|:位或,例如expr | expr。^:位异或,例如expr ^ expr。~:位非,例如!expr。<<:左移,例如expr << expr。>>:右移,例如expr >> expr。
这些操作符也支持重载,对应的特质是BitAnd、BitOr、BitXor、Shl和Shr。
解引用操作符
*:解引用,例如*expr。
范围操作符
..:右排他性范围,例如..、expr..、..expr。..=:右包含性范围,例如..=expr、expr..=expr。
模式匹配操作符
@:模式绑定,例如ident @ pat。
宏和属性操作符
!:宏展开,例如ident!(...)、ident!{...}、ident![..]。#:属性,例如#[meta]。
非操作符符号
除了操作符,Rust中还有一些独立的符号,它们在代码中扮演着重要的角色:
生命周期和路径相关符号
'ident:命名生命周期或循环标签。::path:相对于crate根的路径。self::path:相对于当前模块的路径。super::path:相对于当前模块父模块的路径。
泛型和trait约束符号
<...>:泛型参数,例如Vec<u8>。T: U:泛型参数T约束为实现U的类型。T: 'a:泛型类型T必须比生命周期'a长。
宏和属性
#[meta]:外部属性。#![meta]:内部属性。
注释符号
//:行注释。///:外部行文档注释。/*...*/:块注释。
元组和花括号
():空元组(单位元组)。{...}:代码块表达式或结构体字面量。
方括号
[]:数组字面量或集合索引。[expr; len]:包含len个expr的数组字面量。
通过这些操作符和符号,Rust提供了强大的表达能力,使得程序员能够以精确和高效的方式编写系统级代码。掌握这些操作符和符号的用法,是成为一名Rust程序员的基础。