当前位置: 首页 > article >正文

Rust操作符和符号全解析

Rust是一种系统编程语言,它的语法丰富而严谨,包括了一系列的操作符和符号。这些操作符和符号是构建Rust程序的基本元素,它们用于执行各种操作,如算术运算、逻辑比较、类型约束等。本文将详细介绍Rust中的操作符和符号,以及它们在代码中的使用方式。

Rust操作符

Rust中的操作符可以分为以下几类:

算术操作符

  • +:加法,例如expr + expr
  • -:减法,例如expr - expr
  • *:乘法,例如expr * expr
  • /:除法,例如expr / expr
  • %:取余,例如expr % expr

这些操作符都支持重载,对应的特质(trait)分别是AddSubMulDivRem

赋值操作符

  • =:赋值,例如var = expr
  • +=:加法赋值,例如var += expr
  • -=:减法赋值,例如var -= expr
  • *=:乘法赋值,例如var *= expr
  • /=:除法赋值,例如var /= expr
  • %=:取余赋值,例如var %= expr

比较操作符

  • ==:相等比较,例如expr == expr
  • !=:不等比较,例如expr != expr
  • <:小于比较,例如expr < expr
  • <=:小于等于比较,例如expr <= expr
  • >:大于比较,例如expr > expr
  • >=:大于等于比较,例如expr >= expr

这些操作符都支持重载,对应的特质是PartialEqPartialOrd

逻辑操作符

  • &&:逻辑与,例如expr && expr
  • ||:逻辑或,例如expr || expr
  • !:逻辑非,例如!expr

位操作符

  • &:位与,例如expr & expr
  • |:位或,例如expr | expr
  • ^:位异或,例如expr ^ expr
  • ~:位非,例如!expr
  • <<:左移,例如expr << expr
  • >>:右移,例如expr >> expr

这些操作符也支持重载,对应的特质是BitAndBitOrBitXorShlShr

解引用操作符

  • *:解引用,例如*expr

范围操作符

  • ..:右排他性范围,例如..expr....expr
  • ..=:右包含性范围,例如..=exprexpr..=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程序员的基础。


http://www.kler.cn/a/442017.html

相关文章:

  • LDD3学习8--PCI/PCIE驱动(TODO)
  • 2025.1.17——三、SQLi regexp正则表达式|
  • 【机器学习实战中阶】音乐流派分类-自动化分类不同音乐风格
  • Docker 镜像加速的配置
  • 数据仓库复用性:业务需求复用性设计
  • 大疆发布可折叠航拍无人机,仅重249g,支持 4800 万像素拍摄
  • Java对集合的操作方法
  • 面试小札:闪电五连鞭_7
  • opencv # Sobel算子、Laplacian算子、Canny边缘检测、findContours、drawContours绘制轮廓、外接矩形
  • Sentry日志管理thinkphp8 tp8 sentry9 sentry8 php8.x配置步骤, tp8自定义异常处理类使用方法
  • NSDT 3DConvert:高效实现大模型文件在线预览与转换
  • 关于llama2:从原始llama-2-7b到llama-2-7b-hf的权重转换教程
  • cesium 与 threejs 对比
  • attack xv6
  • Pytorch | 从零构建ResNet对CIFAR10进行分类
  • RabbitMQ:添加virtualHost
  • 005 QT常用控件Qwidget_上
  • 随手记:小程序兼容后台的wangEditor富文本配置链接
  • VMware ubuntu16.04怎么设置静态IP联网
  • openharmony bootanimation分析及常见错误
  • 如何在 Debian 上安装 Dovecot(POP / IMAP)?
  • TCP客户端模拟链接websocket服务端
  • 基于ubuntu的mysql 8.0安装教程
  • 中国当代篆刻孙溟㠭作品《美》
  • 科研绘图系列:R语言绘制韦恩图(Venn plot)
  • WebGPU、WebGL 和 OpenGL/Vulkan对比分析